利用iframe 异步文件上传

最近在项目中用到了文件上传功能 ,目前来说主流的上传控件很多uploadify webUploader等

我们在正常做文件上传功能时,由于ajax不支持设置enctype ajax传递的类型为text(String或者JSON) 所以我们只能通过插件flash 或者 iframe

进行类似功能实现,我在最近的项目中使用了iframe来实现该功能,话不多说上货:

jsp 部分:

<form id="formImg" action="/business/Information/upload" enctype="multipart/form-data" method="post" target="hidden_frame">
<span>选择要上传的封面:</span>
<input id="attachmentsId"  type="file"  name='file' width="90%"  />
<input  type="button" value="上传" name="import" style="width:80px;height:20px" οnclick="uploadImg()">
<img id="pic" style='width:100px; height=100px' src='' />
</form>
</div>
<iframe style="display:none" name='hidden_frame' id="hidden_frame" οnlοad="callback()"></iframe> 

1.建立一个iframe 然后可以通过设置irame的宽高把这个iframe 隐藏掉

2.把form的target属性设置为iframe id 即将form表单提交到这个iframe里 

3.编写js方法

   js:

function uploadImg()  
{  
    var names=$("#attachmentsId").val().split(".");  
    if(names[1]!="gif"&&names[1]!="GIF"&&names[1]!="jpg"&&names[1]!="JPG"&&names[1]!="png"&&names[1]!="PNG")  
    {  
    alert("图片必须为gif,jpg,png格式");  
        return;  
    }  
    $("#formImg").submit();  
}  
  
function callback()  
{  
 var body = $(window.frames['hidden_frame'].document.body);
 var info = body.context.textContent;
 if(info==""){
 return;
 }else{
 var msg = info.split(";")[0];
 if(msg=="上传成功"){
 $("#pic").attr("src",info.split(";")[1]);
 $("#infromationPicId").val(info.split(";")[1]);
 }
 alert(msg);   
 } 
}

最后后台controller方法 (项目使用的springmvc 其他框架自行改写)

@RequestMapping(value="/upload",method=RequestMethod.POST,produces="application/json;charset=UTF-8")
public String upload(MultipartFile file,HttpServletRequest request,HttpServletResponse response){
try {
//System.out.println(uploadPath);
String filename = file.getOriginalFilename();
   long _lTime = System.nanoTime();
   String _ext = filename.substring(filename.lastIndexOf("."));
   filename = _lTime + _ext;    
FileUtils.writeByteArrayToFile(new File(uploadPath,filename), file.getBytes());
request.getSession().setAttribute("pic", "/toucuzhongxin.ccpit.org.upload"+"/"+filename);
return "上传成功;/toucuzhongxin.ccpit.org.upload"+"/"+filename;
} catch (IOException e) {
e.printStackTrace();
return "上传失败";
}
}

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值