J'utilise Spring Boot et je peux envoyer des images inférieures à 1 Mo, mais lorsque je fais une demande de publication avec une grande image supérieure à 1 Mo, j'obtiens cette erreur:
Maximum upload size exceeded; nested exception is Java.lang.IllegalStateException:org.Apache.Tomcat.util.
http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.
J'ai parcouru tellement d'endroits pour essayer de trouver la réponse à cette erreur. J'ai examiné toutes ces questions et essayé d'implémenter ce qu'elles suggèrent en vain: Limite de taille du fichier de téléchargement de printemps , J'essaie de définir maxFileSize mais ce n'est pas honoré , org.Apache.Tomcat.util.http.fileupload.FileUploadBase $ FileSizeLimitExceededException , et Max Limit of MultipartFile in spring boot
J'utilise la version 2.0.3 de Spring et voici mon post mapping:
@PostMapping("/post")
public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {
String message = "";
try {
storageService.store(file);
files.add(file.getOriginalFilename());
message = "You successfully uploaded " + file.getOriginalFilename() + "!";
return ResponseEntity.status(HttpStatus.OK).body(message);
} catch (Exception e) {
message = "FAIL to upload " + file.getOriginalFilename() + "!";
return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(message);
}
}
Et voici toute la configuration application.properties que j'ai essayée:
1
spring.servlet.multipart.max-file-size=-1
spring.servlet.multipart.max-request-size=-1
2
spring.servlet.multipart.max-file-size=5MB
spring.servlet.multipart.max-request-size=5MB
3
spring.http.multipart.max-file-size=5MB
spring.http.multipart.max-request-size=5MB
4
multipart.max-file-size=5MB
multipart.max-request-size=5MB
5
server.Tomcat.max-file-size=5000000
6
server.Tomcat.max-http-post-size=5000000
sept
spring.servlet.multipart.maxFileSize=-1
spring.servlet.multipart.maxRequestSize=-1
Même essayé de le changer en application.yml:
spring:
servlet:
multipart:
max-file-size: 5MB
max-request-size: 5MB
J'ai également cherché à modifier la taille de la demande autorisée par Tomcat dans le fichier web.xml, mais je n'ai pas de fichier web.xml. Le Tomcat que j'utilise est intégré à l'application.
Ajoutez les lignes ci-dessous dans application.properties pour la version Spring Boot 2.0.0.RELEASE et versions supérieures -
spring.servlet.multipart.max-file-size=128MB
spring.servlet.multipart.max-request-size=128MB
spring.servlet.multipart.enabled=true
Veuillez noter pour les versions inférieures, c'est-à-dire 1.5.9.RELEASE et ci-dessous la configuration était la suivante:
spring.http.multipart.max-file-size = 20MB
spring.http.multipart.max-request-size = 20MB
Selon la dernière propriétés communes de Spring Boot ci-dessous devrait fonctionner
MULTIPART (MultipartProperties)
spring.servlet.multipart.enabled=true # Whether to enable support of multipart uploads.
spring.servlet.multipart.file-size-threshold=0 # Threshold after which files are written to disk. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.location= # Intermediate location of uploaded files.
spring.servlet.multipart.max-file-size=1MB # Max file size. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.max-request-size=10MB # Max request size. Values can use the suffixes "MB" or "KB" to indicate megabytes or kilobytes, respectively.
spring.servlet.multipart.resolve-lazily=false # Whether to resolve the multipart request lazily at the time of file or parameter access.
ou Si vous souhaitez simplement contrôler les propriétés en plusieurs parties, alors multipart.max-file-size
et multipart.max-request-size
les propriétés devraient fonctionner.
multipart.max-file-size=5MB
multipart.max-request-size=5MB
Avez-vous essayé cela?
spring.http.multipart.maxFileSize = 20MB
spring.http.multipart.maxRequestSize = 20MB
OR
spring.http.multipart.max-file-size = 20MB
spring.http.multipart.max-request-size = 20MB
Fonctionne pour moi avec Spring Boot 1.5.x
C'est ce que j'ai et cela fonctionne parfaitement pour moi pour le backend.
@PutMapping(value = USER_PROFILE_UPDATE_URL_MAPPING)
public String updateProfile(
@ModelAttribute(AUTHORIZED_USER_MODEL_KEY) User user,
BindingResult bindingResult,
@RequestParam(name = "file") MultipartFile multipartFile,
Model model, @RequestParam Map<String, String> params) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
User authorizedUser = (User) authentication.getPrincipal();
//....
return REDIRECT_TO_LOGIN;
}
Et dans le fichier bootstrap.yml, j'aurai simplement quelque chose comme ça ... qui ne permettra que la taille maximale du fichier de 2 mégaoctets.
---
spring:
servlet:
multipart:
max-file-size: 2MB
max-request-size: 2MB
et enfin, dans mon fichier HTML, j'aurai quelque chose comme ça ...
<form id="profileForm"
th:action="@{/update}"
th:object="${user}"
method="post" enctype="multipart/form-data">
<!-- This will modify the method to PUT to match backend -->
<input type="hidden" name="_method" value="PUT">
...
<div class="col-md-3">
<div class="form-group row">
<label for="file" class="custom-file">
<input name="file" type="file" id="file" aria-describedby="fileHelpId" class="form-control-file btn btn-outline-info">
</label>
<small id="fileHelpId" class="form-text text-muted">Maximum size should be 2MB</small>
</div>
</div>
Et cela devrait parfaitement fonctionner. J'utilise également Spring Boot 2.0.3