参考文章:https://blog.csdn.net/chenchunlin526/article/details/70945877/
https://blog.csdn.net/qq_36671474/article/details/77773874
https://blog.csdn.net/qq_41669724/article/details/80748952
https://blog.csdn.net/dulonghao/article/details/78196999
1、加入两个jar包,commons-fileupload-1.3.jar、commons-io-1.2.jar
2、在配置文件applicationContext.xml加上以下配置
-
<!-- 定义文件解释器(文件上传) -->
-
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
-
<!-- 设置默认编码 -->
-
<property name="defaultEncoding" value="utf-8"></property>
-
<!-- 上传图片最大大小1M-->
-
<property name="maxUploadSize" value="1048576"></property>
-
</bean>
3jsp部分代码:
var obj={};
var formdata1=new FormData($("#breifintro_from")[0]);//formdata1的表单里面有普通类型数据也有图片文件
var formdata2=new FormData($("#days_setting1_from")[0]);
for(var i in formdata1){
obj[formdata1[i].name]=formdata1[i].value;
}
for(var i in formdata2){
obj[formdata2[i].name]=formdata2[i].value;
}
//ajax实例
$.ajax({
type:"post",
data:obj,
url: "<%=basePath%>api/addaccount.action",
processData: false,
contentType: false,
async: false,
sucess: function (data) {
alert(data);
//alert(projectname);
//alert(projectName);
if (confirm('Are you sure to turn to sign in account?'))
window.location.href ="<%=basePath%>api/connect.action";
}
});
4.controller层:
// 先实例化一个文件解析器
CommonsMultipartResolver coMultiResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
// 判断request请求中是否有文件上传
if (coMultiResolver.isMultipart(request)) {
// 转换Request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// jsp页面的input标签可以有不同的name属性值
Iterator<String> fileNames = multiRequest.getFileNames();
while (fileNames.hasNext()) { //循环遍历
MultipartFile file = multiRequest.getFile(fileNames.next()); //取出单个文件
if (!file.isEmpty()) {
//设置图片上传路径(服务器)
String uploadPath = multiRequest.getSession().getServletContext().getRealPath("/upload");
//把图片路径存到数据库的路径名,先判断图片的name
if(file.getName().equals("projectImage")) {
String projectpath=getImage.getPath(uploadPath,file);
project.setProjectImage(projectpath);
}else if(file.getName().equals("processImage")) {
String processpath=getImage.getPath(uploadPath,file);
processintro.setProcessImage(processpath);
}
}
}
}
//将其保存到session中
request.getSession().setAttribute("projectImage", project.getProjectImage());
request.getSession().setAttribute("processImage", processintro.getProcessImage());
但是!我的一直有问题,前台数据传不到后台,之前能传的普通数据也为空,没有找到原因,因为我这个页面有多个表单,所以我要使用表单序列化同时提交所有的表单数据,所以有些麻烦,不知道是不是序列化对于图片这样的数据不合适,希望各位前辈能够答疑