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

3

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

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

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

3个回答

3

回答你的第一个问题,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>

这个程序在客户端到服务器的文件传输之前,会验证文件大小吗? - user6077173
不,如果你想在客户端和服务器之间传输文件之前验证大小,你必须使用jQuery/JavaScript验证。 - vaibhav patil

1
我认为处理这个问题的人应该是前端程序员(JavaScript/H5),他们应该在用户上传之前检查文件大小。然后,服务器操作员需要设置一些属性,例如“maxRequestLength”或“upload_max_filesize”来处理HTTP请求。

如果它是一个REST API呢? - Player_Neo

1

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

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

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

});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接