Écrire devant
En ce qui concerne les téléchargements de fichiers, nous devons d'abord parler de la logique métier. Si tout le monde peut voir les fichiers téléchargés (tels que des publicités ou des bannières sur la page d'accueil), nous mettons l'image dans la zone de ressources statique (le même endroit que CSS et JS). Si le fichier est protégé (comme l'utilisateur ne peut afficher que les photos téléchargées par lui-même), nous la stockons dans un emplacement sur le serveur où les images sont spécialement stockées.
Cet exemple montre la méthode de téléchargement des fichiers stockés dans deux emplacements. Après le téléchargement, en tant qu'extension, la fonction de visualiser les fichiers téléchargés et de téléchargement de fichiers téléchargés est également ajoutée.
Préparation
Configurer les packages SpringMVC et Importer Commons
Configurer l'analyseur de téléchargement de fichiers dans mvc-servlet.xml
<! - Fichier Téléchargez l'analyseur -> <bean id = "MultipartResolver"> <propriété name = "maxuploadSize" value = "1000000" /> <propriété name = "Defayencoding" value = "utf-8" /> </ank>
Stocké dans des zones de ressources statiques
1. Emplacement de stockage:
Stockés dans le projet, le chemin est donc le chemin par rapport au projet.
/ {yourproject} / webapp / static / img
2. Configurez le gestionnaire de réponses
@ControllerPublic class uploadController {@getMapping ("/ upload") public String uploadHandler () {return "upload"; } @Postmapping ("/ upload / static") public void writeStatic (httpServLetRequest, redirectTributes redirectTributes, @RequestParam ("nom de fichier") fichier multipartfile) {if (! File.isempty ()) {// obtenir le dossier cible Path = request.getServletCon "statique / img /"; // Obtenez le nom de fichier source téléchargé par le fileName de chaîne utilisateur = file.getoriginalFileName (); // Créer un nouveau fichier de fichier File1 = nouveau fichier (path, nom de fichier); // Écrivez le fichier sur file.transfert (file1); redirectattributes.addflashAttribute ("message", "télécharger vers le succès statique"); return "redirect: / upload"; } else {redirectattributes.addflashAttribute ("message", "le fichier de téléchargement ne peut pas être vide"); return "redirect: / upload"; }}}Stocker sur le serveur
1. Emplacement de stockage de cet exemple:
Stocké à un certain emplacement sur le serveur, n'a rien à voir avec le projet, donc l'adresse est un chemin absolu.
/ Users / Mac / Desktop / ImgTemp /, est le chemin absolu vers le répertoire.
2. Configurez le gestionnaire de réponses
... @ postmapping ("/ upload / disk") public String writeToDisk (HttpServLetRequest Request, @RequestParam ("FileName") Fichier multipartFile, redirectAttributes RedirectAttributes) {if (! File.isempty ()) {// Obtenir le nom de fichier source Strong FileLename = file.getoriginalFileName (); // Obtenez la chaîne de dossier de dossier de fichier Enregistrer PATH = "/ users / mac / Desktop / imgTemp /"; // Créer un nouveau fichier de fichier File1 = nouveau fichier (path, nom de fichier); // écrire un fichier file.transferto (file1); }} ...Partie étendue (afficher et télécharger des fichiers)
Étant donné que la réponse est de passer le fichier sous la forme d'un flux, nous devons définir correctement le type Mimie de la réponse à analyser correctement par le navigateur. Le type Mimie par défaut du fichier d'application est l'application / l'octet-stream. Une fois MIME réglé sur cette valeur, le navigateur n'exécutera ni ne demandera automatiquement à exécuter ces fichiers et téléchargera directement le fichier sur la zone locale sous la forme de traitement des pièces jointes.
Pour plus d'interprétations de Mimie, veuillez consulter cet article
Si nous souhaitons personnaliser le nom du fichier de téléchargement, nous devons définir le message de contenu.
Disposition de contenu L'en-tête de message indique la forme de la réponse à afficher, qu'elle soit en ligne (c'est-à-dire une page Web ou une partie d'une page), ou téléchargée et enregistrée localement sous la forme d'une pièce jointe.
Pour plus d'informations sur la disposition du contenu, veuillez consulter cet article
... @ getMapping ("/ download / bydefault") public void getImgbyDefault (@requestParam String filename, @RequestParam (required = false, defaultValue = "") string savename), httpservletResponse réponse {if (stringUtils.isempty (filename)) {réponse.sendrorror (404); retour; } // chemin de la chaîne de stockage de fichiers path = "/ users / mac / Desktop / imgTemp /"; // nouveau fichier fichier fichier = nouveau fichier (path, nom de fichier); if (! file.exists ()) {réponse.Senderror (404); retour; } // Si le paramètre de demande Savename n'est pas vide, téléchargez le fichier if (! StringUtils.isempty (Savename)) {// Définissez la longueur de réponse Response.SetContentLength ((int) file.length ()); // Définissez le type MIME de la réponse à Application / Octet-Stream Response.SetContentType (MediaType.Application_OCTET_STREAM_VALUE); Savename = new String (Savename.getBytes ("UTF-8"), "ISO8859-1"); // définir la disposition du contenu à la pièce jointe; fileName = Savename Response.sethEader (httpheaders.content_disposition, "attachement; filename = /" "+ savename +" / ""); } // Lire le fichier inputStream est = new FileInputStream (fichier); OutputStream OS = Response.getOutputStream (); // Fichier de sortie ioutils.copy (IS, OS); os.flush (); os.close (); is.close ();}Nous pouvons également utiliser le convertisseur ByteArrayhttpMessageConverter qui est livré avec SpringMVC dans les fichiers de sortie, qui implémente l'interface HTTPMessageConverter. Toutes les informations sur les demandes de mime peuvent être lues et le mime des informations de réponse est l'application / l'octet-stream
... @ getMapping ("/ download / byConvert") public httpentity <byte []> getImgByConvert (@RequestParam String FileName, @RequestParam (required = false, defaultValue = "") String savename) {if (stringUtils.isempty (nom de fichier)) {return news réponse <> (httpstatus.not_found); } String path = "/ users / mac / busktop / imgTemp /"; Fichier fichier = nouveau fichier (path, nom de fichier); if (! file.exists ()) {return new ResponseNtity <> (httpstatus.not_found); } Httpheaders en-têtes = new httpheaders (); if (! StringUtils.Isempty (Savename)) {headers.setContentType (mediaType.Application_octet_stream_Value); En-thers.setContentLength (file.length ()); Savename = new sting (Savename.getBytes ("UTF-8"), "iso8859-1"); en-henders.add (httpheaders.content_disposition, "jointe; filename = /" "+ savename +" / ""); } else {headers.setContentType (mediaType.image_png); } Renvoie un nouveau httpentity <> (fileCopyUtils.copyToByteArray (fichier), en-têtes);}upload.jsp
<% @ page contentType = "text / html; charset = utf-8" lingots = "java"%> <% @ taglib prefix = "form" uri = "http://www.springframework.org/tags/form"%> <% @ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> <! doctype html> <html> <éadf> <meta charset = "utf-8"> <meta name = "Viewport" content = "width = device-width, user-scalable = no, initial-scale = 1.0, maximum-scale = 1.0, minimum-scale = 1,0 "> <meta http-equiv =" x-ua-compatible "contenu =" ie = edge "> <itle> document </ title> <link rel =" Stylesheet "href =" / static / bootstrap-3.3.5-dist / css / bootstrap.cs "rel =" External nofollow "> </read> <h1 h1 Dispat de fichiers </h1> <c: if test = "$ {non vide Message}"> <h2> $ {message} </h2> </ c: if> <form: formulaire enctype = "multipart / form-data" Action = "/ upload / static"> <p> téléchargement vers / web / static </p> <label for = ""> upload file: </ label> name = "uploadFile"> <Fut-bouton> soumettre </ bouton> </ formulaire: form> <formulaire: formulaire enctype = "multipart / form-data" action = "/ upload / disk"> <p> upload to disk </p> <label for = ""> upload file href="/download/byDefault?fileName=dubbo.png" rel="external nofollow" target="_blank">Use the default method to view dubbo images uploaded to Disk</a> </button> <button> <a href="/download/byDefault?fileName=dubbo.png&saveName=dubb.png" rel="external nofollow" >Use the Méthode par défaut pour télécharger Dubbo Images </a> </ Button> </div> <div> <button> <a href = "/ download / byConvert? filename = dubbo.png" rel = "external nofollow"> Utilisez la méthode par défaut pour télécharger des images Dubbo </a> </ Button> </ div> <div> <button> <a href = "/ téléchargement / byConvert? rel = "external nofollow" target = "_ blanc"> Utilisez le convertisseur MVC pour afficher les images dubbo téléchargées sur disque </a> </futton> <futton> <a href = "/ download / byconvert? filename = dubbo.png & savename = dub.png" rel = "external nofollow"> </futton> </div> </div> </ body> </html>Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.