[JAVA] J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC

Facile à faire!

Devrait être. Il est étonnamment facile d'y arriver. Il semble que vous puissiez suivre cette voie à partir du printemps 4 pour le moment.

Activez les fonctionnalités de téléchargement des fichiers de distribution et de servlet

Spring utilise un objet appelé "MultipartFile" lors du téléchargement de fichiers. Allumons ce paramètre dans Spring et Servlet

Définissons web.xml et application-config.xml (xml avec les paramètres Bean).

Tout d'abord, le fichier en plusieurs parties du répartiteur Spécifiez la taille de téléchargement. Le dernier élément est la taille du fichier temporaire que le serveur enregistre. Il semble préférable de spécifier quelque chose de manière explicite.

web.xml


  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/mvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <!--Mode de téléchargement de fichiers-->
    <multipart-config>
    	<max-file-size>5242880</max-file-size>
    	<max-request-size>5242880</max-request-size>
    	<file-size-threshold>0</file-size-threshold>
    </multipart-config>
  </servlet>


Et maintenant, Spring peut gérer les fichiers en plusieurs parties. Ajoutons le résolveur multi-parties au bean.

application-config.xml


    
     <!--Résolveur de téléchargement de fichiers-->   
    <bean id="multipartResolver"
		 class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
	</bean>

C'est facile ici.

Faites le côté de la vue.

Créons une page de téléchargement! Lors du téléchargement d'un fichier, définissez ** enctype = "multipart / form-data ** sous forme.

Ma source est

  1. J'utilise Spring Security, donc j'utilise la balise <form: form>
  2. Puisque j'utilise le formulaire de téléchargement, la fonctionnalité est que ** modelAttribute ** est spécifié.

Le reste n'est pas cette source spéciale. (Bien sûr jsp)

ImageUpload.html


<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<head>
<meta content="ja" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Veuillez saisir votre image de mer ou d'eau préférée</title>
</head>

<body>

<form:form action="imageComplete"  method="post"
modelAttribute="ImageUploadForm" enctype="multipart/form-data">
Entrez votre image préférée de la mer ou de l'eau! > <
	<input name="image" type="file" />
	
	<input name="submit" type="submit">
</form:form>

</body>

</html>

Ceci est le formulaire de téléchargement reçu par le serveur

ImageUploadForm.java



import lombok.Data;

/**
 *Formulaire d'inscription
 * @author nozawa
 *
 */
@Data
public class ImageUploadForm {
	@NotNull
	private MultipartFile image;
}

Créez un contrôleur côté serveur.

Créons maintenant un côté serveur qui reçoit les images téléchargées.

Tout d'abord, activez le formulaire de téléchargement.

ImageIOController.java



@Controller
public class ImageIOController {

	@ModelAttribute(name = "ImageUploadForm")
	public ImageUploadForm initForm(){
		ImageUploadForm imageUploadForm = new ImageUploadForm();
		/*
Réglage initial
		*/
		return imageUploadForm;
	}
}

Ensuite, créez une méthode pour afficher l'écran de téléchargement.

ImageIOController.java



	@RequestMapping(value = "/imageUpload", method = RequestMethod.GET)
	public ModelAndView imageUpload() {
		ModelAndView mv = new ModelAndView("ImageUpload");
		return mv;
	}

C'est le principal. Faites une partie pour recevoir l'image. Tout ce que vous avez à faire est de spécifier le formulaire de téléchargement comme argument! C'est super facile.

ImageIOController.java


	@RequestMapping(value = "/imageComplete", method = RequestMethod.POST)
	public ModelAndView imageUploadComplete(ImageUploadForm imageUploadForm) {
		System.out.println(imageUploadForm.getImage().getOriginalFilename());
		
		Integer FileSize = (int) (imageUploadForm.getImage().getSize());
		
		byte[] ImageBinary = new byte[FileSize];
		
		try {
			 ImageBinary = imageUploadForm.getImage().getBytes();
		} catch (IOException e) {
			//Bloc de capture généré automatiquement TODO
			e.printStackTrace();
		}
		
		ModelAndView mv = new ModelAndView("ImageComplete");
		return mv;
	}

L'objet MultipartFile dans le formulaire de téléchargement est Ils accèdent aux fichiers temporaires qui existent sur le serveur. Vous pouvez également obtenir des données binaires correctement ヾ (.> ﹏ <.) ノ

L'ensemble du contrôleur ressemble à ceci

ImageIOController.java


package com.TsugaruInfo.controller;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import com.TsugaruInfo.formmodel.ImageUploadForm;
import com.TsugaruInfo.formmodel.RegisterForm;

@Controller
public class ImageIOController {

	@ModelAttribute(name = "ImageUploadForm")
	public ImageUploadForm initForm(){
		ImageUploadForm imageUploadForm = new ImageUploadForm();
		/*
Réglage initial
		*/
		return imageUploadForm;
	}
	
	@RequestMapping(value = "/imageUpload", method = RequestMethod.GET)
	public ModelAndView imageUpload() {
		ModelAndView mv = new ModelAndView("ImageUpload");
		return mv;
	}
	
	@RequestMapping(value = "/imageComplete", method = RequestMethod.POST)
	public ModelAndView imageUploadComplete(ImageUploadForm imageUploadForm) {
		System.out.println(imageUploadForm.getImage().getOriginalFilename());
		
		Integer FileSize = (int) (imageUploadForm.getImage().getSize());
		
		byte[] ImageBinary = new byte[FileSize];
		
		try {
			 ImageBinary = imageUploadForm.getImage().getBytes();
		} catch (IOException e) {
			//Bloc de capture généré automatiquement TODO
			e.printStackTrace();
		}
		
		ModelAndView mv = new ModelAndView("ImageComplete");
		return mv;
	}
}

Courir

Lançons-le

Ouvrez d'abord l'écran de téléchargement image.png

Sélectionnez une image et envoyez-la!

Jetons un coup d'œil à la console.

image.png

Je pense que le serveur lit correctement le nom du fichier.:. ゜ ヽ (´∀`.) Non.:. ゜

référence 5.17. Téléchargement de fichiers https://terasolunaorg.github.io/guideline/public_review/ArchitectureInDetail/FileUpload.html

Recommended Posts

J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
Implémenter le téléchargement de fichiers avec Spring MVC
Comment réaliser un téléchargement de fichiers volumineux avec TERASOLUNA 5.x (= Spring MVC)
J'ai essayé de me connecter à MySQL en utilisant le modèle JDBC avec Spring MVC
Téléchargement de fichiers avec Spring Boot
J'ai essayé d'implémenter TCP / IP + BIO avec JAVA
J'ai essayé de démarrer avec Spring Data JPA
J'ai essayé d'implémenter Sterling Sort avec Java Collector
J'ai essayé d'interagir avec Java
J'ai essayé GraphQL avec Spring Boot
J'ai essayé Flyway avec Spring Boot
[Rails] J'ai essayé d'implémenter le traitement par lots avec la tâche Rake
J'ai essayé de démarrer avec Swagger en utilisant Spring Boot
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 1/3 (paramètres Jasper Reports)
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 3/3 (contrôle Spring MVC)
J'ai essayé de démarrer avec Web Assembly
J'ai essayé d'implémenter la fonction de prévisualisation d'image avec Rails / jQuery
J'ai essayé de créer un environnement de développement Spring MVC sur Mac
J'ai essayé d'implémenter un mappage OU flexible avec MyBatis Dynamic SQL
J'ai essayé Spring.
J'ai essayé d'implémenter le modèle Iterator
J'ai essayé de créer une application Android avec MVC maintenant (Java)
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
Implémenter l'entrée / sortie d'image avec Spring MVC
Comment réaliser le téléchargement de fichiers avec Feign
Comment réaliser un téléchargement de fichiers volumineux avec Rest Template of Spring
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports 2/3 (création de modèle de formulaire)
J'ai essayé de vérifier AdoptOpenJDK 11 (11.0.2) avec l'image Docker
J'ai essayé de faire une authentification de base avec Java
J'ai essayé d'implémenter des relations polymorphes à Nogizaka.
J'ai essayé de gérer la configuration des jambes de force avec Coggle
J'ai essayé de gérer les informations de connexion avec JMX
Essayez d'implémenter la fonction de connexion avec Spring Boot
J'ai essayé de lier JavaFX et Spring Framework.
Je voulais classer la botte à ressort dans un multi-projet
J'ai essayé d'implémenter un serveur en utilisant Netty
J'ai essayé de casser le bloc avec java (1)
J'ai essayé Spring Batch
J'ai essayé d'implémenter une fonction équivalente à Felica Lite avec HCE-F d'Android
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports Extra (édition Variables)
J'ai essayé d'imprimer un formulaire avec Spring MVC et Jasper Reports Extra Edition (édition d'image)
Comment créer un formulaire Excel à l'aide d'un fichier modèle avec Spring MVC
J'ai essayé de cloner une application Web pleine de bugs avec Spring Boot
J'ai essayé de lire et de sortir CSV avec Outsystems
J'ai essayé d'implémenter la notification push Firebase en Java
[Java 11] J'ai essayé d'exécuter Java sans compiler avec javac
05. J'ai essayé de supprimer la source de Spring Boot
J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter
J'ai essayé de réduire la capacité de Spring Boot
Je souhaite surveiller un fichier spécifique avec WatchService
J'ai essayé de dessiner une animation avec l'API Blazor + canvas
J'ai essayé OCR de traiter un fichier PDF avec Java
Comment tester l'écran de téléchargement de fichiers avec Spring + Selenium
[Java] J'ai essayé de mettre en œuvre la recherche de produits de l'API Yahoo
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
Téléchargement de fichiers avec Spring Boot (ne pas utiliser de fichier en plusieurs parties)
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
[Swift] J'ai essayé d'implémenter une interface utilisateur semblable à un profil Instagram avec UICollectionView avec juste du code sans storyboard