問題描述
我有一個 Spring MVC 網絡,它有兩個不同的頁面,它們有不同的表單來上傳不同的文件.其中一個應該有 2MB 的限制,而另一個應該有 50MB 的限制.
I have a Spring MVC web with two different pages that have different forms to upload different files. One of them should have a limitation of 2MB, while the other should have a 50MB limitation.
現在,我的 app-config.xml 中有這個限制:
Right now, I have this limitation in my app-config.xml:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- one of the properties available; the maximum file size in bytes (2097152 B = 2 MB) -->
<property name="maxUploadSize" value="2097152 "/>
</bean>
我可以像這樣在我的主控制器中解決 maxUploadSize 異常:
And I could resolve the maxUploadSize exception in my main controller like that:
@Override
public @ResponseBody
ModelAndView resolveException(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception exception) {
ModelAndView modelview = new ModelAndView();
String errorMessage = "";
if (exception instanceof MaxUploadSizeExceededException) {
errorMessage = String.format("El tama?o del fichero debe ser menor de %s", UnitConverter.convertBytesToStringRepresentation(((MaxUploadSizeExceededException) exception)
.getMaxUploadSize()));
} else {
errorMessage = "Unexpected error: " + exception.getMessage();
}
saveError(arg0, errorMessage);
modelview = new ModelAndView();
modelview.setViewName("redirect:" + getRedirectUrl());
}
return modelview;
}
但這顯然只控制了 2MB 的限制.我怎么能限制 20MB 的呢?我試過這個解決方案:https://stackoverflow.com/a/11792952/1863783,它更新了限制運行.但是,這會為每個會話和每個控制器更新它.因此,如果一個用戶正在為第一個表單上傳文件,另一個使用第二個表單上傳的用戶應該有第一個的限制......
But this, obviously, only controlls the 2MB limit. How could I make the limitation for the 20MB one? I've tried this solution: https://stackoverflow.com/a/11792952/1863783, which updates the limitation in runtime. However, this updates it for every session and every controller. So, if one user is uploading a file for the first form, another using uploading in the second form should have the limitation of the first one...
有什么幫助嗎?謝謝
推薦答案
乍一看似乎不是最好的解決方案,但這取決于您的要求.
It may seem like not the best solution at first sight, but it depends on your requirements.
您可以為所有控制器設置一個具有最大上傳大小的全局選項,并為特定控制器使用較小的值覆蓋它.
You can set a global option with maximum upload size for all controllers and override it with lower value for specific controllers.
application.properties 文件(Spring Boot)
application.properties file (Spring Boot)
spring.http.multipart.max-file-size=50MB
使用檢查上傳控制器
public void uploadFile(@RequestPart("file") MultipartFile file) {
final long limit = 2 * 1024 * 1024; // 2 MB
if (file.getSize() > limit) {
throw new MaxUploadSizeExceededException(limit);
}
StorageService.uploadFile(file);
}
如果文件大于 2MB,您將在日志中看到此異常:
In case of a file bigger than 2MB you'll get this exception in log:
org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 2097152 bytes exceeded
這篇關于根據控制器更改文件大小限制 (maxUploadSize)的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!