1.html 文件上传表单
<form action="" enctype="multipart/form-data" method="post" class="stdform stdform2" id="upload-form"> <input type="file" name="upload" id="uplodfile" /> <button id="file-submit" class="submit radius2" style=" 100px; font-size: 15px">提 交</button>
2. js 异步提交
function __submit(){ $('#upload-form').submit(function(e){
//前端验证
/* var file = $("#uplodfile").val(); var pos=file.lastIndexOf("\"); var filename=file.substring(pos+1); var type=(filename.substr(filename.lastIndexOf("."))).toLowerCase(); var allowedTypes=['.pdf','.jpg','.png']; if(allowedTypes.indexOf(type)==-1){ layer.alert('不允许的文件类型!',{icon: 5 ,offset:['40%', '40%']}); return false; }
*/ $(this).ajaxSubmit({ url: 'rcm_upload.action', dataType: 'json', type:'post', success: function(data){ alert(data.msg)
} }); return false; }); }
3.strtus2文件上传拦截配置 struts.xml
<action name="file_*" class="com.demo.action.FileManager.Action" method="{1}"> <result name="success" type="json"> <param name="root">data</param> <param name="contentType">text/plain</param> <param name="excludeNullProperties">true</param> </result> <param name="savePath">/download</param> <interceptor-ref name="fileUpload"> <!--配置允许上传的文件类型--> <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> <!--配置文件拦截后的input action跳转--> <result name="input" type="chain">file_input</result> </action>
4.action
@SuppressWarnings("static-access")
public class UploadAction extends ActionSupport { private File uploadImage; //得到上传的文件 private String uploadImageContentType; //得到文件的类型 private String uploadImageFileName; //得到文件的名称 public String execute(){ System.out.println("fileName:"+this.getUploadImageFileName()); System.out.println("contentType:"+this.getUploadImageContentType()); System.out.println("File:"+this.getUploadImage()); //获取要保存文件夹的物理路径(绝对路径) String realPath=ServletActionContext.getServletContext().getRealPath("/upload"); File file = new File(realPath); //测试此抽象路径名表示的文件或目录是否存在。若不存在,创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 if(!file.exists())file.mkdirs(); try { //保存文件 FileUtils.copyFile(uploadImage, new File(file,uploadImageFileName));
setMessage(MessageType.Ok, "文件上传成功!"); //返回消息处理。。 } catch (IOException e) { e.printStackTrace(); } return SUCCESS; }
public String input()
{
setMessage(MessageType.Erro, "不允许的文件类型!"); //返回消息处理
return SUCCESS;
}
public File getUploadImage() { return uploadImage; } public void setUploadImage(File uploadImage) { this.uploadImage = uploadImage; } public String getUploadImageContentType() { return uploadImageContentType; } public void setUploadImageContentType(String uploadImageContentType) { this.uploadImageContentType = uploadImageContentType; } public String getUploadImageFileName() { return uploadImageFileName; } public void setUploadImageFileName(String uploadImageFileName) { this.uploadImageFileName = uploadImageFileName; } }
注意 :struts 文件拦截成功后自动直接返回 “input” ,我们要对返回的result name=“input” 进行配置
我们这里只进行拦截成功的提示:配置内部action跳转即可
<!--配置文件拦截后的input action跳转--> <result name="input" type="chain">rcm_input</result>