[JAVA] Je souhaite contrôler la taille de fichier maximale pour le téléchargement de fichiers pour chaque URL dans Spring Boot

1. Ce que vous voulez faire

2. Version, conditions, etc.

3. Ce que j'ai fait

--Créez l'Intercecptor suivant et déterminez la taille de MultipartFile #

MultipartFileInterceptor.java


public class MultipartFileInterceptor extends HandlerInterceptorAdapter {

	private final long maxFileSize;

	public MultipartFileInterceptor(long maxFileSize) {
		this.maxFileSize = maxFileSize;
	}
	
	public MultipartFileInterceptor(String maxFileSize) {
		this(ByteSizeUnit.toBytes(maxFileSize));
	}

	@Override
	public boolean preHandle(HttpServletRequest request,
							 HttpServletResponse response,
							 Object handler) throws Exception {

		if (MultipartRequest.class.isInstance(request) && maxFileSize >= 0) {
			MultipartRequest multipartRequest = MultipartRequest.class.cast(request);

			multipartRequest.getFileMap()
				.values()
				.stream()
				.forEach(f -> {
					if (f.getSize() > maxFileSize) {
						throw new MaxUploadSizeExceededException(maxFileSize);
					}
				});
		}

		return super.preHandle(request, response, handler);
	}
}

--Créez un WebMvcConfigurer comme celui ci-dessous et associez l'intercepteur à l'URL que vous souhaitez contrôler.

WebMvcConfig


@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

	@Value("${app.file.max-file-size:-1}")
	private String fileMaxFileSize;

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new MultipartFileInterceptor(fileMaxFileSize))
			.addPathPatterns("/file");
	}

}

ByteSizeUnit.java


public enum ByteSizeUnit {

	KB {
		@Override
		long toBytes(long size) {
			return size * UNIT_SIZE;
		}
	},
	MB {
		@Override
		long toBytes(long size) {
			return size * UNIT_SIZE * UNIT_SIZE;
		}
	},
	GB {
		@Override
		long toBytes(long size) {
			return size * UNIT_SIZE * UNIT_SIZE * UNIT_SIZE;
		}
	};

	abstract long toBytes(long size);

	static final long UNIT_SIZE = 1024;

	public static long toBytes(String size) {
		if (Objects.isNull(size) || size.isEmpty()) {
			throw new IllegalArgumentException("size must not be empty");
		}

		for (ByteSizeUnit byteSizeUnit : values()) {
			if (size.toUpperCase().endsWith(byteSizeUnit.name())) {
				return byteSizeUnit.toBytes(Long.valueOf(size.substring(0, size.length() - byteSizeUnit.name().length())));
			}
		}

		return Long.valueOf(size);
	}

}
  1. Example

Veuillez me faire savoir si vous pouvez le faire avec les paramètres de Spring Boot. fin.

Recommended Posts

Je souhaite contrôler la taille de fichier maximale pour le téléchargement de fichiers pour chaque URL dans Spring Boot
Je veux contrôler le message d'erreur par défaut de Spring Boot
Ce que j'ai fait lors de la migration de la série Spring Boot 1.4 vers la série 2.0
Ce que j'ai fait lors de la migration de la série Spring Boot 1.5 vers la série 2.0
[Spring Boot] Je veux ajouter mon propre fichier de propriétés et obtenir la valeur avec env.getProperty ().
Je veux connaître la méthode du contrôleur où l'exception a été levée dans le ExceptionHandler de Spring Boot
Étapes pour rendre Spring Boot capable de faire référence à la valeur dans le fichier de propriétés
Mon mémorandum que je veux faire ValidationMessages.properties UTF8 dans Spring Boot
Comment se lier avec un fichier de propriétés dans Spring Boot
[Spring Boot] Comment se référer au fichier de propriétés
Je veux obtenir la valeur en Ruby
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
J'ai essayé de réduire la capacité de Spring Boot
Comment tester l'écran de téléchargement de fichiers avec Spring + Selenium
Lors du téléchargement d'un fichier avec Spring Boot, la gestion des erreurs est effectuée lorsque la taille maximale du fichier est dépassée.
Je souhaite lire le fichier de propriétés avec un nom de fichier autre que application.yml ou application- [nom du profil] .yml avec Spring Boot
Changez la cible d'injection pour chaque environnement avec Spring Boot 2
Je souhaite contrôler l'affichage de la barre de navigation de gestion supérieure (menu Contrôle) dans Liferay 7 / DXP
[Rails] [bootstrap] Je souhaite modifier la taille de la police de manière réactive
Téléchargement de fichiers avec Spring Boot
Je veux obtenir une liste du contenu d'un fichier zip et sa taille non compressée
Je souhaite changer la couleur du menu de contrôle en haut de Liferay 7 / DXP
Je veux créer un fichier Parquet même en Ruby
Je souhaite passer au même écran dans l'état enregistré
Je souhaite renvoyer plusieurs valeurs de retour pour l'argument saisi
Comment contrôler les transactions dans Spring Boot sans utiliser @Transactional
Je souhaite simplifier l'instruction if-else de la branche conditionnelle en Java
Je veux comprendre le flux des paramètres de demande de traitement Spring
L'histoire de Collectors.groupingBy que je veux garder pour la postérité
[Eclipse] Je souhaite ouvrir le même fichier deux fois [Éditeur fractionné]
Je veux supprimer la marge supérieure dans UITableView de Grouped (swift)
[Java] Je veux effectuer distinctement avec la clé dans l'objet
Je veux changer la valeur de l'attribut dans Selenium of Ruby
[Android] Je souhaite obtenir l'auditeur à partir du bouton de ListView
Spring Boot pour la première fois
[Pour les débutants] Je souhaite saisir automatiquement des données pré-enregistrées dans le formulaire de saisie avec une commande de sélection.
[Spring Boot] Liste des règles de validation qui peuvent être utilisées dans le fichier de propriétés pour les messages d'erreur
[Ruby] Je souhaite afficher uniquement le caractère impair dans la chaîne de caractères
Spring.messages.fallback-to-system-locale: false est requis pour le message par défaut.properties pour la prise en charge i18n de Spring Boot
Je veux écrire une JSP dans Emacs plus facilement que la valeur par défaut.
[Spring Boot] J'ai étudié comment implémenter le post-traitement de la demande reçue.
Liste de réglages de Glassfish que je souhaite conserver pour le moment
Je suis resté coincé en utilisant un cas de serpent pour le nom de variable dans Spring Boot
Solution de contournement pour que Command Line Runner fonctionne avec JUnit dans Spring Boot
J'ai utilisé Docker pour solidifier le modèle à développer avec Spring Boot.
Je souhaite obtenir l'adresse IP lors de la connexion au Wi-Fi avec Java
Je souhaite afficher un message d'erreur lors de l'inscription dans la base de données
[Pour usage interne] Pour ceux affectés au projet Spring Boot (en construction)
[Java Spring MVC] Je souhaite utiliser DI dans ma propre classe
"Professeur, je souhaite implémenter une fonction de connexion au printemps" ① Hello World
Je veux que vous utilisiez Enum # name () pour la clé de SharedPreference
Priorité d'accès aux fichiers statiques dans Spring Boot
Mémorandum de téléchargement de fichier local avec Spring Boot
Je veux utiliser @Autowired dans Servlet