ajaxFileUpload+Struts2文件上传

来源:互联网 发布:万网二手域名交易平台 编辑:程序博客网 时间:2024/06/05 19:56

前台:

1. 引入ajaxFileUpload.js文件

2. 前台通过input type=file文件的onchange方法去调用上传js代码

<input id="logoPicUrl"  name="logoPicUrl" onchange="uploadFile(this);" type="file">

如果想在执行ajax代码以后控制文件显示的信息,就需要做隐藏的type=file控件,因为不同浏览器对这个控件支持不一样,显示的信息也不同,我的做法如下:

<input id="logoPicUrl"  name="logoPicUrl"  onchange="uploadFile(this);" type="file" >
<div >
<a  href="javascript:void(0)" onclick='document.getElementById("logoPicUrl").click();'>

<input id="logoFile" name="model.logoPicUrl"  readonly="true" placeholder="点击选择上传的Logo"/>

</a>
</div>

  3. js代码

这里面是用document去获取的控件里面的文件,jQuery有时会获取不到,原因不太清楚,如果想改用jQuery请注意一下这个问题。

uploadFile = function(x){
var logofile = document.getElementById("logoPicUrl").files[0];
if( logofile instanceof Object) {
if(x.name=="logoPicUrl"){
//判断上传文件的类型
var fileName=logofile.name;
var fileType=fileName.substring(fileName.lastIndexOf("."),fileName.length).toUpperCase(); 
if(!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(fileType)){
layer.alert("
只能上传图片类型");
$("#logoPicUrl").val("");
return;
}
 
var requestURL="${contextPath}/groupAction!uploadFile.${actionExtension};
  $.ajaxFileUpload({
           
    url: requestURL, 
           
    secureuri: false, //一般设置为false
         
     type:'post',
           
    fileElementId: 'logoPicUrl', // 上传文件的id、name属性名
           
    dataType:'text',
           
    cache:false,
         
     success: function(data, status){$("#logoFile").val(data);},
         
     error: function(data, status, e){ }
     
});
}
}
}
     

在ajaxFileUpload方法里面,如果要返回数据,要把dataType设置为'text',否则获取的会是DOM或者其他的东西。有时浏览器会有严重的缓存现象,例如你第一次上传了一个图片,第二次重新上传一张,但后台获取的还是第一次上传的文件,这时要把cache设置成false。

后台:

1.之前查到很多资料说后台想获取要上传的文件,只需要在后台定义一个File类型的文件,名字与前台ajaxFileUpload中指定的fileElementId的type=file控件的name相同(File logoPicUrl),以及两个String类型的用于存储文件名称和类型的字段(String logoPicUrlFileName,logoPicUrlContentType),struts2框架会将文件信息set到这些属性里,但是我在使用过程中没成功,我是从request里面取的。

2.MultiPartRequestWrapper req=(MultiPartRequestWrapper) getRequest();
logoPicUrl = req.getFiles("logoPicUrl")[0];

3.如果是SpringMVC框架直接定义一个MultipartFile 的实例就可以接收到

4.如果想往前台传数据,可以使用writeResponse("想要传送的数据");

0 0
原创粉丝点击