使用struts2及xheditor实现文件、图片上传(支持拖拽上传)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

xheditor +struts2 文件上传(一般情况和支持HTML5拖拽上传)1、准备工作

Struts2.2.3导入相关jar包

Xheditor1.1.4引入jquery和xheditor的js文件

2、效果图

a) 使用上传图片按钮进行上次

b) 将图片进行拖入上传(支持html5的浏览器)

3、相关代码

a)单纯的使用普通方式上传:如下图:

Struts2中Action中的方法:

和传统的上传没什么区别,记得写getter和setter

Xheditor官方要求:

返回内容必需是标准的json字符串,结构可以是如下:{"err":"","msg":"200906030521128703.gif"} 或者

{"err":"","msg":{"url":"200906030521128703.jpg","localfile":"test.jpg","id":"1"}} 注:若选择结构2,则url变量是必有

注意:

1.上传成功时返回的json字符串是:{"err":"","msg":"200906030521128703.gif"}

2.err是””,不能省略,

3.方式1,msg返回值是上传成功文件的路径;

4.方式2,则msg中的url是上传成功文件的路径

5.url第一个字符是!表示立即上传,不需要点确定就插入到textarea中

Jsp中:

【特别应该注意的是:html5Upload:false;如果不设置成false,在支持html5的浏览器(eg:chrome)中,会默认使用html5上传的方式,导致未设置multipart/form-data上传失败,而在不支持html5,例如IE中正常。】

吐槽一下,xheditor的作者为何不默认上传使用传统方式,且html5Upload默认还是true,官方也没有明显的说明,因为这个问题测试了很久。

b)支持html5的拖拽上传

官方说明:HTML5上传的整个POST数据流就是上传的文件完整数据,而本地文件名等信息储存于HTTP_CONTENT_DISPOSITION这个服务器变量中。

也就是说,如果是html5实现的文件上次,我们可以从request的header的Content-Disposition中获得相关数据,可以打开浏览器的网络监测查看。

Struts2中Action中的方法:

Jsp中:无任何变化,把html5Upload =true即可

注:本程序未对细节做过多的处理,重在实现上传,比如上传文件的限制,上传成功后的回调函数未做处理。问后附上了完整的程序,本人邮箱623565791@欢迎交流。

4、完整代码

下面是完整代码,如果您还有什么问题,可以参考:

Struts2

packagecom.zhy.xheditor.action;

importjava.io.File;

importjava.io.IOException;

importjava.io.PrintWriter;

importjavax.servlet.ServletInputStream;

importjavax.servlet.http.HttpServletResponse;

mons.io.FileUtils;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")

public class FileUpload extends ActionSupport

{

public File filedata;

public String filedataFileName;

public void ajaxFileUpload()

{

String dirPath = ServletActionContext.getRequest().getSession()

.getServletContext().getRealPath("");

File dir = new File(dirPath + "/resources/upload");

String contentDisposition = ServletActionContext.getRequest()

.getHeader("Content-Disposition");// 如果是HTML5上传文件,那么这里有相应头的

if (contentDisposition != null)

{// HTML5拖拽上传文件

Long fileSize = Long.valueOf(ServletActionContext.getRequest()

.getHeader("Content-Length"));// 上传的文件大小

String fileName = contentDisposition.substring(contentDisposition

.lastIndexOf("filename=\""));// 文件名称

fileName = fileName.replaceAll("filename=\"", "");

fileName = fileName.substring(0, fileName.length() - 1);

System.out.println(fileName);

相关文档
最新文档