Spring HTTP 文件上传:文件大小验证

Posted

技术标签:

【中文标题】Spring HTTP 文件上传:文件大小验证【英文标题】:Spring HTTP File Upload: Validation of File Size 【发布时间】:2016-10-21 06:39:30 【问题描述】:

我有一个关于在基于 Spring 的 HTTP 文件上传服务中验证文件大小的基本问题。我正在使用 Spring 的org.springframework.web.multipart.MultipartFile 来执行文件上传。

我的问题是multipartFile.getSize() 方法是否仅在完成整个上传后才返回大小?如果是,根据大小限制文件的正确前瞻性方法是什么?

注意:我问这个问题的原因是因为我不希望最终用户上传 1 GB 文件并在之后收到错误消息 一个小时说,“抱歉,允许的最大文件大小为 2 KB。”

【问题讨论】:

【参考方案1】:

回答你的第一个问题,multipartFile.getSize() 方法是否只有在整个上传完成后才返回大小?

-不,您在完成整个上传之前获得 multipartFile.getSize()。

@RequestMapping(value = "/CSVfileupload")
public @ResponseBody String callCSVFileUpload(
    @RequestParam("CSVfilepath") MultipartFile multipartFile, HttpSession session,HttpServletRequest request) throws IOException 
     //get the file size before doing any operation 
     logger.info("Controller - callCSVFileUpload() multipartFile.getSize()="+ multipartFile.getSize());
     InputStream inputStream =  new BufferedInputStream(multipartFile.getInputStream());
     JsonArray response=null;
     try
         //you business logic 
        
     catch(Exception e)
        e.printStackTrace();
        
        logger.info(" response.toString()="+ response.toString());
        return response.toString();
    //end of callCSVFileUpload

您可以在 application-context.xml 文件中使用 CommonsMultipartResolver。

<bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="50000000" />
</bean>

【讨论】:

这会在文件从客户端传输到服务器之前验证大小吗? 否。如果您想在文件从客户端传输到服务器之前验证大小,您必须使用 jquery/javascript 验证。【参考方案2】:

MultipartFile 只检查服务器端的文件大小。如果您想在上传时检查文件大小,您需要使用客户端javascriptjqueryjavascriptjquery 可用于在上传时检查文件端。

$('#myFile').bind('change', function() 

  //this.files[0].size gets the size of your file.
  alert(this.files[0].size);

);

【讨论】:

【参考方案3】:

我认为使用它的人应该是前端程序员 (javascript/h5),他们应该在用户上传之前检查大小。然后服务器端操作员需要设置一些属性,如 http请求的“maxRequestLength”或“upload_max_filesize”。

【讨论】:

如果是 REST API 怎么办?

以上是关于Spring HTTP 文件上传:文件大小验证的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot tomcat 上传文件大小受限制

Spring Boot配置文件上传大小限制

spring boot 2.X上传文件限制大小

《SpringBoot上传文件大小》

spring-boot 参数长度文件上传大小限制问题

springboot 文件上传大小配置