开发者社区> 问答> 正文

springMVC+ajaxfileupload 直接走error 400 请求报错 

之前用form表单上传,现在换了无刷新。就不灵了
浏览器直接走error,不走success,火狐不报错,,,uc报400.  eclipse后台也不报错。。就晕了。

@RequestMapping("/imageUpload1.do")
@ResponseBody
public Result Upload(@RequestParam("fileToUpload") MultipartFile file  ,HttpServletRequest request,HttpServletResponse response){  
	if(file==null){
		System.out.println("file is null");
	}
	Result result=new Result();
	result.setMsg("good");
	return result;
}

再就是前端

<body>
    
    <!-- 点击图片,打开文件选择器,确定,上传。(这是网络上的一个图片) -->  
<img id="upload" alt=""   src="upload.png">  
  
	<!-- 隐藏file标签 -->  
	<input id="fileToUpload" style="display: none" type="file" name="upfile"><br/>
    <span id="ok"></span>
  </body>
<script type="text/javascript">
    	$(function(){
    		//点击打开文件选择器  
    		$("#upload").on('click', function() {  
       		$('#fileToUpload').click();  
    	});  
      
    //选择文件之后执行上传  
    $('#fileToUpload').on('change', function() {  
        $.ajaxFileUpload({  
            url:'http://localhost:8080/upload/imageUpload1.do',  
            secureuri:false,  
            fileElementId:'fileToUpload',//file标签的id  
            dataType: 'text',//返回数据的类型  
            success: function (data,status) {  
                $("#ok").html(result.msg);
                 
            },  
            error: function (data,status,e) {  
                alert("链接错误");  
            }  
        });  
    });  
    		
    	})
    </script>

这是uc报的,每次点击之后报这错,之后再点不报,刷新再报。

但是直接用get测试链接。

报错:

<!-- 定义文件上传处理器 -->
 	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  		<property name="defaultEncoding" value="UTF-8" />
  		<!-- 指定所上传文件的总大小不能超过800KB......注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
    <!--     <property name="maxUploadSize" value="800000"/> -->
	</bean>
	
	
	<mvc:annotation-driven/>
	<!-- 注解扫描路径 -->
	<context:component-scan base-package="day1email"/>
</beans>
<servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:applicationContext.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>

我感觉不会是jq和jajaxfile的版本版本不兼容哇,之前听说有版本匹配的问题了

展开
收起
kun坤 2020-05-30 15:06:33 1077 0
1 条回答
写回答
取消 提交回答
  • input id="fileToUpload" style="display: none" type="file" name="upfile"
    我对前端不太熟,如果没记错的话,提交的参数名用的应该用的是name吧,你这个name和spring取的参数名不一样 ######问题找到了,是这个ajaxfileupload本身就是个残次品,网上人都说,换了其他人的修改版本,立马ok。。谢谢了######谢谢,刚看到,改了,后台能收到了,不过前端还是有问题,在改。######这种情况你应该把Log发上来的######http://pan.baidu.com/s/1pJTeCNx 帮忙看一下,因为不能再添加了,格式不对,看起来也麻烦,我放到百度云了。两张图片,一张请求信息,一张错误信息######没有日志,后台啥反应也没有######不设置mime能上传?######

    上传图片、上传文件凡用到ajaxFileUpload 提交的存在ie9\ie10下的bug,不知道你这个适不适用。解决办法如下:

    1、更新static\oa\js\ajaxfileupload.js

    2、在调用上传的Cotroller中如: @RequestMapping(value = "/importBase")

        public void importBase(HttpServletRequest request, HttpServletResponse response){

    }

    方法中去掉HelperClazz.renderJson()方法,替换为:

     PrintWriter writer = null;

            try {

                response.setHeader("Pragma", "no-cache");

                response.setHeader("Cache-Control", "no-cache");

                response.setDateHeader("Expires", 0);

                response.setContentType("text/html;chartset=UTF-8");

                writer = response.getWriter();

                writer.write("{ "fileName": "" + fileName + "" }");

                writer.flush();

            } catch (IOException e) {

                e.printStackTrace();

            }finally {

                if (writer != null)

                    writer.close();

            }

      目的是ajaxfileupload.js只能封装成text/html形式的响应。

    3、在jsp中$.ajaxFileUpload({    返回值  去掉  var str = $(result).text();

                        修改                     var obj = jQuery.parseJSON(result);

            

    ######我前端是html,不用jsp,因为这个所以不直接用form表单上传。前后端只用json交互。。###### 如果只是图片的话,用Multipart上传可能还不如直接BASE64
    可以绕过很多问题 ######但是不是图片,是文件,pdf,doc等

    2020-05-31 13:05:58
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载