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
只检查服务器端的文件大小。如果您想在上传时检查文件大小,您需要使用客户端javascript
或jquery
。 javascript
或jquery
可用于在上传时检查文件端。
$('#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 文件上传:文件大小验证的主要内容,如果未能解决你的问题,请参考以下文章