SpringMVC中MultipartResolver 獲取文件內(nèi)容為空問題

最近在系統(tǒng)的學(xué)習(xí)springmvc,在寫demo的時候發(fā)現(xiàn)multipartHttpServletRequest.getFileMap(); 一直是空,找解決方案都不是很理想,后來去閱讀了一下官網(wǎng)說明原來在定義文件解析器MultipartResolver的時候,沒有設(shè)置resolveLazily屬性為true(默認(rèn)值為false)
最終實現(xiàn)多文件上傳代碼如下:

    //文件解析器
    @Bean
    public MultipartResolver multipartResolver(){
        CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver();
        multipartResolver.setMaxUploadSize(1000000);
        multipartResolver.setDefaultEncoding("UTF-8");
        //問題所在
        multipartResolver.setResolveLazily(true);
        return multipartResolver;
    }

controller里就可以獲取到文件流了

    //支持批量上傳
    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public @ResponseBody
    String upload(HttpServletRequest request) {
        MultipartHttpServletRequest multipartHttpServletRequest = this.resolver.resolveMultipart(request);
        Map<String, MultipartFile> fileMap = multipartHttpServletRequest.getFileMap();
        System.out.println(fileMap.isEmpty());
        fileMap.forEach((key, file) -> {
            try {
                System.out.println(key);
                FileUtils.writeByteArrayToFile(new File("/home/sxq/learnspring" + File.separator + file.getOriginalFilename()), file.getBytes());
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
        return "success";
    }

猜測:MultipartResolver在initBinder的時候默認(rèn)會自動解析request,并清空文件流里的內(nèi)容,導(dǎo)致在controller中的request獲取不到文件流信息,當(dāng)設(shè)置multipartResolver.setResolveLazily(true); 則不會自動解析

如有不對請多指教。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容