关于使用ajax上传图片问题

2021-07-14 17:05

阅读:652

标签:dom   controls   web   required   gets   pac   net   patch   detail   

      今天需要做一个上传图片的功能,由于框架里面没有带,上网搜了下。看到有spring mvc的图片上传,而且有例子,刚好是自己需要的,直接粘贴复制下。参考:

      http://blog.csdn.net/luckey_zh/article/details/46867957# 

    很简单,使用了commons-upload和commons-io包,配置文件位置后,页面form表单这几设置,然后就好了。

     配置完后,自己运行却发现,上传报错了:

     

org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
	org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.(FileUploadBase.java:840)
	org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:259)
	org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:283)
	org.apache.catalina.connector.Request.parseParts(Request.java:2811)
	org.apache.catalina.connector.Request.getParts(Request.java:2729)
	org.apache.catalina.connector.RequestFacade.getParts(RequestFacade.java:1075)
	org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:84)
	org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.(StandardMultipartHttpServletRequest.java:77)
	org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:76)
	org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1073)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:912)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
	org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	com.springapp.mvc.filter.UploadImageInterceptor.doFilter(UploadImageInterceptor.java:27)

    上网搜了下,原来是因为自己使用的是ajax提交的,但是ajax默认的content-type是x-www-form-urlencoded,这样提交文件是无法生效的。由于框架的原因,如果改成form提交和其他页面相差太大,而且不一定能解决问题,于是决定继续顺着ajax为何不能提交这个坑继续下去。

   然后上网继续搜,发现需要设置ajax的几个属性为false,这样才能提交:(参考http://www.jianshu.com/p/46e6e03a0d53)

  

 $.ajax({
        	url: "ur",
            contentType: false,  //必须设置 
            processData: false,  //必须设置
            cache: false,   //设置为false
          // data: $(form).serialize(),
            data: new FormData($(‘#myForm‘)[0]),
            type: "POST",

  刚开始用    data: $(form).serialize(), 结果不行,换成了下面的这种,然而又有问题了。页面的元素通过request.getParameter("")居然获取不到了。。。


继续搜,为何搜不到。。。然后在一篇文章上面看到了下面的说法:(参考:http://www.chongchonggou.com/g_464425214.html)

设置提交方式为enctype="multipart/form-data"后,使用request.getParameter(“”)是获取不到页面的formData的数据的。 上面也说了解决办法,就是使用common-smartupload进行获取,我就是

通过这种方式获取的,不过碰到了几个问题,比如乱码问题、windows/linux 分隔符问题以及文件找不到等小问题,最后总算解决了。另外附上一篇一个大神之前写的一篇文章。

http://www.cnblogs.com/xdp-gacl/p/4200090.html


附上自己的代码以及实现:

前端:

 
#if(${activity.pic} == "null")
#end #if(${activity.pic} != "null")
xxx #end


评论


亲,登录后才可以留言!