JQuery、ajaxFileUpload、Struts2和注解异步上传文件
一个很好的组件ajaxFileUpload,利用此组件成功实现了异步文件上传!第一步:需要导入jquery-1.7.2.min.js、ajaxfileupload.js两个文件,在jsp页面引入的顺序必须是jquery-1.7.2.min.js在先,ajaxfileupload.js在后,因为ajaxfileupload.js依赖与jquery包,所以你懂得! jsp页面代码: <!-- lang: html --> <button id="uploadSubmit" type="submit" class="btn btn-sm btn-info col-md-1 col-md-offset-1" onclick="FileUpload('uploadSubmit');"> <span class="glyphicon glyphicon-upload"></span>Upload </button> js代码: <!-- lang: js --> function FileUpload(buttonId) { $.ajaxFileUpload({ url : 'fileUpload!upload',// 用于文件上传的服务器端请求地址 type : "post", dataType : "json", timeout : 1000, secureuri : false,// 一般设置为false fileElementId : uploadId,// 文件上传空间的id属性 <input type="file" id="uploadId" /> error : function(XMLHttpRequest, textStatus, errorThrown) { }, success : function(data) { } });
<!-- lang: java --> import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import org.apache.struts2.ServletActionContext; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.InterceptorRef; import org.apache.struts2.convention.annotation.InterceptorRefs; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import org.springframework.beans.factory.annotation.Autowired; import cn.caculate.service.upload.IFileUploadService; import com.opensymphony.xwork2.ActionSupport; @Action("fileUpload") @InterceptorRefs(value = { @InterceptorRef("fileUploadStack") }) @Results({ @Result(name = "jsonType", type = "json") }) public class CopyOfFileUploadAction extends ActionSupport { private static final long serialVersionUID = 1L; private static final int BUFFER_SIZE = 16 * 1024; /** * 需要上传的文件 */ private File upload; /** * 上传文件的类型 */ private String uploadContentType; /** * 文件名 */ private String uploadFileName; /** * 上传之后的文件名 */ private String storageFileName; /** * 文件上传的路径 */ public String path = ServletActionContext.getServletContext().getRealPath( File.separator + "WEB-INF" + File.separator + "file"); /** * 新文件上传 * * @return */ public String upload() { try { // 将Struts2自动封装的文件名赋给要写入的文件 storageFileName = uploadFileName; // 创建要写入的文件 File storageFile = new File(path + "//" + storageFileName); copy(upload, storageFile); return "jsonType"; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 上传文件的主要方法 * * @param src * @param dst * @return */ public boolean copy(File src, File dst) { try { InputStream in = null; OutputStream out = null; try { in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE); out = new BufferedOutputStream(new FileOutputStream(dst), BUFFER_SIZE); byte[] buffer = new byte[BUFFER_SIZE]; while (in.read(buffer) > 0) { out.write(buffer); } } finally { if (null != in) { in.close(); } if (null != out) { out.close(); } } } catch (Exception e) { e.printStackTrace(); } return true; } public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } public String getUploadContentType() { return uploadContentType; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public String getUploadFileName() { return uploadFileName; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public String getStorageFileName() { return storageFileName; } public void setStorageFileName(String storageFileName) { this.storageFileName = storageFileName; } public String getPath() { return path; } public void setPath(String path) { this.path = path; }