关于是否使用ajaxfileupload.js插件上传的问题
曾经有过一次使用ajaxfileupload.js的经验,当时也是看着网上的博客来写的,没有问题。
但现在同样又遇到需要文件上传的问题,再次拿起ajaxfileupload.js,发现确实错误频频:
1. handleError 找不到问题
原因:jquery高版本移除了这个方法,在插件里面添加即可
handleError: function( s, xhr, status, e ) {
// If a local callback was specified, fire it
if ( s.error ) {
s.error.call( s.context || s, xhr, status, e );
}
// Fire the global callback
if ( s.global ) {
(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
}
}
2.文件只能上传一次的问题
原因:又是插件问题。。。
找到createUploadForm
var oldElement = $('#' + fileElementId); var newElement = $(oldElement).clone(); $(oldElement).attr('id', fileId); $(oldElement).before(newElement); $(oldElement).appendTo(form);
将以上代码修改成
var oldElement = jQuery('#' + fileElementId); var newElement = oldElement.clone(true); newElement[0].files=oldElement[0].files; oldElement.attr('id', fileId); oldElement.before(newElement); oldElement.appendTo(form);
3. Refused to display "XXXXX这里是你的上传url" in a frame because it set 'X-Frame-Options' to 'DENY'
这个问题对我来说很尴尬,我只知道是由于iframe的问题,网上一大堆都说配置http响应头 X-Frame-Options的属性,很尴尬,我不会。。。。
4.success的回调问题
success: function(data,status){} data一直是undefined,看了好久的源代码,还是没能耐性的找到问题,sorry。。
以下才是正片!!!!!!!!!!!!!!!
鉴于这次使用ajaxfileupload.js遇到如此多的问题,我决定不用它了,恩,对,不用它了。
原理就是form表单提交,咱自己写form不就行了,代码奉上
前端:
<form action="这里是你的上传url" enctype="multipart/form-data" method="post" id="fileForm" name="fileForm">
<input type="file" value="选择文件" id="uploadfile" name="uploadfile">
</form>
这时你需要一个插件可以很方便的帮你使用ajax提交表单 jquery.form.js 下载地址: http://download.csdn.net/detail/yusewuhen/7203209
这里是js代码:
var form = $("#fileForm"); var options = { url:'../corp/excelimport.html', type:'post', dataType: 'json', success:function(data){ var jsondata = eval("("+data+")"); console.log(jsondata); } }; form.ajaxSubmit(options);
这样前台基本上就ok了,感觉比起ajaxfileupload还是方便了不少
后台的话我这边用的是MVC 可以参考一下
这里要想各位解释一下,我这边是上传文件只是为了解析而已,所以只要获取到他的流就行,解析的代码就不贴了,太多了看了乱
@RequestMapping("/excelimport")
@ResponseBody
public String excelimport(@RequestParam(value = "uploadfile") MultipartFile uploadfile,HttpServletRequest request,HttpServletResponse response){
System.out.println("\nexcelimport----------------------------------------------\n"); String userData = ""; String result_str = ""; if (uploadfile != null) { if (uploadfile.isEmpty()) { System.out.println("is empty!"); return "no data"; } else{ // 文件原名称 String originFileName = uploadfile.getOriginalFilename(); try { InputStream stream = uploadfile.getInputStream();return result_str; } catch (Exception e) { System.out.println("文件上传失败"); e.printStackTrace(); } } } return null; }
这边要注意的是 @RequestParam(value = "uploadfile") MultipartFile uploadfile 这个uploadfile 需要和你的<input type="file" name="uploadfile "> 中的name属性保持一致。
posted on 2016-07-20 10:54 phobeZhang 阅读(1562) 评论(0) 收藏 举报
浙公网安备 33010602011771号