文件上传中submit与ajax的问题与思考
来源:互联网 发布:中国广电网络投诉电话 编辑:程序博客网 时间:2024/06/04 19:20
文件上传在项目中经常需要,先上一段代码,用的easyUI
<form id="file_form" method="post" action="/upload" enctype="multipart/form-data"> <div style="margin-bottom: 20px"> <div>任务名称:</div> <input id="task_name" name="task_name" class="easyui-textbox" style="width: 100%; height: 30px;"> </div> <div style="margin-bottom: 20px"> <div>任务描述:</div> <input id="task_descrption" name="task_descrption" class="easyui-textbox" style="width: 100%; height: 30px;"> </div> <div style="margin-bottom: 20px"> <div>类入口:</div> <input id="task_mainClass" name="task_mainClass" class="easyui-textbox" style="width: 100%; height: 30px;"> </div> <div style="margin-bottom: 20px"> <div>文件:</div> <input class="easyui-filebox" id="file" name="file" data-options="prompt:'请选择文件...'" style="width: 100%; height: 30px;"> </div> <div> <a id="upload" href="#" class="easyui-linkbutton" style="width: 100%; height: 30px;">上传</a> </div> </form>
注意:form中一定不要忘记设置enctype=”multipart/form-data”
那么接下来的问题来了,怎么将文件上传到服务器?通常有两种思路,一是采用submit方法,另一种采用ajax(有人可能要拍砖了,ajax不是不能上传文件吗?)
(1)submit
其实只需要使用
document.getElementById("file_form").submit();
或者
$("#file_form").submit();
注解1:如果采用表单名.submit()这种提交方式,可能会有一些问题,因为这种写法不符合W3C标准的规定的,在IE下没有报错因为IE支持这种写法,但是如果在FF下就会报错,建议采用上述的document的方式。
注解2:怎么知道文件是否上传成功了呢?很不幸的是submit没有返回值!
submit Method Submits the form.SyntaxFORM.submit()Return ValueNo return value.RemarksThe submit method does not invoke the onsubmit event handler. Call the onsubmit event handler directly. When using Microsoft® Internet Explorer 5.5 and later, you can call the fireEvent method with a value of onsubmit in the sEvent parameter.
当然即使submit没有返回值,我们还是有手段去知道文件的上传进度和上传成功与否的状态!
(2)ajax
jQuery的ajax()方法使得前端与后台的交互变得更加的简单与便捷。ajax不是不能用于上传文件!有人不仅要问网上有很多ajax用于文件上传,在这里只能说那只是“表象”,他们基本原理都是用js创建一个内部窗体iframe,用创建的iframe去提交文件,实现不刷新当前页面的委ajax效果。
ajax为什么不能用于文件上传:ajax与后台通信都是通过传递字符串,怎么能传递文件呢?其实出于安全考虑js是不允许访问客户端的文件系统的(某些浏览器的插件除外),所以我们无法拿到文件控件里的数据。
当然网上有很多伪ajax的控件,如jquery.form.js /filesaver.js,如简单介绍jquery.form.js:
前端代码
$("#upload").click(function(){ $('#file_form').ajaxSubmit({ dataType : 'json', success : function(data) { } });});
注意在form中已经填写了action的地址!
后端代码实现
@RequestMapping(value = "/upload", method = { RequestMethod.POST, RequestMethod.GET }) @ResponseBody public void upload( final HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "file") MultipartFile... files) throws IOException, Exception { for (MultipartFile f : files) { if (f.getSize() > 0) { File targetFile = new File("D:/" + f.getOriginalFilename()); String filename = targetFile.getName(); f.transferTo(targetFile);// 写入目标文件 } } }
- 文件上传中submit与ajax的问题与思考
- ajax上传文件的原理与实现
- ajax上传文件的原理与实现
- FORM表单中onclick()、onsubmit()与submit()的问题
- FORM表单中onclick()、submit()与onsubmit()的问题
- FORM表单中onclick()、submit()与onsubmit()的问题
- FORM表单中onclick()、submit()与onsubmit()的问题
- FORM表单中onclick()、submit()与onsubmit()的问题
- Ajax的GET与POST和Ajax文件上传进度条
- snail 中遇到的问题与思考
- ExtJS中Ext.Ajax.request与form1.getForm().submit
- ExtJS中Ext.Ajax.request与form1.getForm().submit的基本区别
- ExtJS中Ext.Ajax.request与form1.getForm().submit的基本区别
- ExtJS中Ext.Ajax.request与form1.getForm().submit的基本区别
- ExtJS中Ext.Ajax.request与form1.getForm().submit的基本区别
- ExtJS中Ext.Ajax.request与form1.getForm().submit的基本区别
- ExtJS中Ext.Ajax.request与form.getForm().submit的基本区别
- ExtJS中Ext.Ajax.request与form1.getForm().submit的基本区别
- sql笔记
- MFC中CWnd类及其派生类对话框、消息处理、窗口操作
- arrlist
- [LeetCode]Merge Sorted Array
- Android 之 GridView初探
- 文件上传中submit与ajax的问题与思考
- Redis 集群
- 测试正则表达式工具:regexpal
- Linux下nginx的一些问题
- 【BZOJ】1003 Cards
- WPF使用DEV之TreeListControl---添加复选框
- 树懒_移动开学笔记_day04.1_JavaScript_DOM
- CellularAutomation(细胞自动机)
- 架构设计:负载均衡层设计方案(5)——LVS单节点安装