SSM+ajax实现文件的上传以及常见问题解决办法
jsp页面
<form id="addteacher" enctype="multipart/form-data" class="layui-form" method="post">
<div class="layui-form-item">
<label for="filename" class="layui-form-label">
<span class="x-red">*</span>教师头像
</label>
<div class="layui-input-inline">
<input type="file" id="filename" name="filename"
required="" lay-verify="filename" autocomplete="off" class="layui-input" multiple="multiple"/>
</div>
<div class="layui-form-mid layui-word-aux">
<span class="x-red">*</span>请上传教师头像
</div>
</div>
</form>
ajax写法
var filename = document.getElementById("filename").value;
if ($.trim(filename) == ''){alert("请选择要上传的图片");return ;}
console.log("test");
var result_meg = "";
var uploadFile = new FormData($("#addteacher")[0]);
$.ajax({
url:"${pageContext.request.contextPath}/TeacherInfoController/uploadFile",
type:"post",
async: false,
cache: false,
secureuri: false, //一般设置为false
processData: false, //因为data值是FormData对象,不需要对数据做处理。
contentType: false,
data: uploadFile,
success:function(data){
},
})
ajax写的过程注意事项:
使用formData上传文件
var uploadFile = new FormData(***$("#addteacher")[0]***);
sping-mvc配置MultipartResolver处理器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 默认编码 -->
<property name="defaultEncoding" value="utf-8" />
<!-- 文件大小最大值 -->
<property name="maxUploadSize" value="10485760000" />
<!-- 内存中的最大值 -->
<property name="maxInMemorySize" value="40960" />
</bean>
controller代码
@RequestMapping(value = "/uploadFile",produces="text/html;charset=utf-8",method=RequestMethod.POST)
public @ResponseBody String UploadFile(@RequestParam(value = "filename",required = false) MultipartFile filename,
HttpServletRequest request, HttpServletResponse response){
/*String contentType = request.getContentType();//通过request获取请求类型
if(contentType != null && contentType.toLowerCase().startsWith("multipart/")){
MultipartHttpServletRequest multipartRequest = WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class);
return multipartRequest.getFile(filename); //返回前端传递的文件信息
}else{return null;}*/
/* MultipartHttpServletRequest MulRequest = request instanceof MultipartHttpServletRequest ? (MultipartHttpServletRequest) request : null;
System.out.println("bdbdb");
System.out.println(filename);*/
System.out.println(filename);
return "";
}
温馨提示
在文件上传过程注意事项:
1.SpringMVC+ajax+FormData文件上传报java.lang.NullPointerException检查方向
1.1.springmvc-servlet.xml配置文件要加上下面的标记
<!-- SpringMVC上传文件时,需要配置MultipartResolver处理器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 默认编码 -->
<property name="defaultEncoding" value="utf-8" />
<!-- 文件大小最大值 -->
<property name="maxUploadSize" value="10485760000" />
<!-- 内存中的最大值 -->
<property name="maxInMemorySize" value="40960" />
</bean>
最最重要一点:id="multipartResolver"不可以修改
1.1.form表单忘记设置“enctype=“multipart/form-data”
form表单没有设置enctype="multipart/form-data"