jsp页面上传文件,java后台接收文件遇到的坑

 

1、获取到文件流,原始方法想通过json格式化后,在后台将文件流,相关参数一起注入bean中取出,请求不成功,错误原因:文件流经过序列化后变为空对象

2、使用单独的ajax请求将文件流通过FormData处理送入后台,后台以带参的方式获取,不成功,原因:项目时基于maven,springmvc,mybatis,没有做相应的配置,请求错误400

详细配置:

(1)添加依赖

 

<!-- 添加依赖包,才可以上传文件,否则请求400 -->
    <dependencies>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
<!-- 添加依赖包,才可以上传文件,否则请求400  end-->

 

(2)项目配置

    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 上传文件大小上限,单位为字节(10MB) -->
        <property name="maxUploadSize">
            <value>10485760</value>
        </property>
        <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
        <property name="defaultEncoding">
            <value>UTF-8</value>
        </property>
    </bean>

(3) jsp页面,相关参数在配置中介绍

<body >
    <input type="file" id="image" name="image" multiple/>
    <button id="su" onclick="upLoad()">提交</button>
</body>
<script type="text/javascript">
function upLoad(){
//使用以下方式需要引入jQuery相关依赖,也可以选择使用document操作
var file = $("#image")[0].files[0];
//打印file 为对象
console.log(file);
var formObj = new FormData();
//将文件流使用FormData对象处理其中image是后台取值需要
formObj.set('image', file);
$.ajax({
    url:'${APP_PATH }/test33',
    data:formObj,
    type: 'POST',
    dataType:'json',
    processData:false,//必须false
    contentType:false,//必须false
    success:function(data){
        alert(data.Msg);
    }
});
}  
</script>
</html>    

(4)后台java代码

    @RequestMapping("/test33")
    public void test3( @RequestParam("image") MultipartFile uploadFile) throws IOException{
        if(uploadFile!=null){
        System.out.println(uploadFile.getSize()+"  2:"+uploadFile.getSize());
         byte[] by=uploadFile.getBytes();
         for(int i=0;i<by.length;i++){
             System.out.print(by[i]);
         }
        }else{
            System.out.println("uploadFile=null");
        }
    }

 

 

posted @ 2019-05-22 21:43  null-sy  阅读(5776)  评论(0编辑  收藏  举报