一、正常上传文件的步骤。
1.设置表单form属性:enctype="multipart/form-data"
2.js代码:
var file = document.getElementById("file2");
var fileList = file.files; //获取的文件数组
- function uploadFile(obj){//这是我的方法
- var form=document.getElementById('record'); //record是form的id
- var formData = new FormData(form);//将form放入formdata中
- for(var i=0;i<fileArr.length;i++){//这两个是我的要上传的文件数组
- //将数组中的file放入,传到后台
- formData.append("picfile",fileArr[i]);
- }
- for(var i=0;i<otherFile.length;i++){
- //将数组中的file放入,传到后台
- formData.append("otherfile",otherFile[i]);
- }
- $.ajax({
- dataType : "json",
- url : "/service/record/ajaxUploadUpdate",
- method : "post",
- data :formData,
- // 告诉jQuery不要去处理发送的数据
- processData : false,
- // 告诉jQuery不要去设置Content-Type请求头
- contentType : false,
- success : function(data){
- //成功之后的操作
- },
- error:function(){
- obj.disabled=false;
- }
- })
- }
3.我的后台参数列表
@RequestMapping(value = "upload", method = RequestMethod.POST)
@ResponseBody
public String upload(@RequestParam("picFile") MultipartFile picFile,@RequestParam("otherfile") MultipartFile otherfile,
@ModelAttribute("form") EvaluationReportForm form)'
picFile,otherfile这两个参数是我用来接收文件数组的。后面一个是用来接收其他的参数
二、我遇到的问题
在选择文件的情况下,一切ok,没什么问题。
但是在我修改的时候,没有选择文件的情况下,直接404,报错。
三、解决方法
我也是在网上看到别人的文章试了下,可以。
获取文件数组的方式,不要通过参数列表获取,换一种通过request的方式来,代码如下:
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;//这个request是HttpServletRequest request
List<MultipartFile> picfile=multipartRequest.getFiles("picfile");
List<MultipartFile> otherfile=multipartRequest.getFiles("otherfile");
这样就解决问题了。