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");
        }
    }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM