今日在用SSM做上传时,在Controller层一直无法获取前端传递的数据,先贴上代码。
前端代码
<script type="text/javascript">
$(function (){
$("#btnUpFile").on("click",function (){
//1、获取要上传的文件资源
var upfile = $("#file")[0].files[0];
//2、创建FormData对象来存储要上传的资源
var formData = new FormData;
formData.append("aa",upfile);
console.log(formData.get('aa'));
//3、发起ajax请求来请求资源上传
$.post({
data:formData,
url:"/regUpLoad",
processData:false,
contentType:false,
success:function (data){
//将相应数据转换为json对象
eval("var obj="+data);
if(obj.status==true){
alert("上传成功");
}else {
alert(obj.msg);
}
}
})
})
})
</script>
Controller层代码
package com.xynl.controller;
import com.alibaba.fastjson.JSON;
import com.xynl.pojo.UpLoadFile;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@Controller
public class FileUpLoad {
//声明单元方法,处理上传请求
/**
* MultipartFile
* 该形参用来接收DispatcherServlet解析request对象中存储了文件二进制的对象
* 形参名字必须是上传数据formData的键值名
*/
@RequestMapping(value = "/regUpLoad")
public void regUpLoad(@RequestParam(value = "aa",required = false) MultipartFile aa, HttpServletResponse response, HttpServletRequest request) throws IOException {
//1.确定文件的存储路径
//使用ServletContext动态获取upload的路径
String path=request.getServletContext().getRealPath("/upload");
//2.确定文件的存储名字
//获取文件原始名
String oldName = aa.getName();
//获取文件存储的后缀名
String suffix = oldName.substring(oldName.lastIndexOf(".")+1);
//创建文件新的名字+后缀
String newName = UUID.randomUUID()+""+suffix;
//3.完成存储
//创建file对象的存储路径
File f = new File(path);
if(!f.exists()){
f.mkdirs();//创建存储路径
}
//输出存储
aa.transferTo(new File(f,newName));
//4.响应结果
//创建UpLoadFile对象存储相应数据
UpLoadFile upLoadFile = new UpLoadFile(true,"",newName);
//将upLoadFile对象转换为json对象
String jsonStr = JSON.toJSONString(upLoadFile);
//直接响应
response.getWriter().write(jsonStr);
}
}
接收不到数据原因是在SpringMVC.xml中没有配置下边这个bean,这个bean的的id是固定的,一定要写这个,就是因为前边m写成大写了,卡了我好长时间,写代码一定要细心。
<!-- 配置上传解析bean,给DispatcherServlet使用,调用该bean对象完成对request上传数据的解析-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>
本人小白,本文章做个记录,也给同样问题的老哥指个方向。
|