Escribir en frente
Cuando se trata de cargas de archivos, primero debemos hablar sobre la lógica de negocios. Si todos pueden ver los archivos cargados (como anuncios o pancartas en la página de inicio), entonces colocamos la imagen en el área de recursos estáticos (la misma ubicación que CSS y JS). Si el archivo está protegido (como el usuario solo puede ver las fotos cargadas por él mismo), entonces lo almacenamos en una ubicación en el servidor donde las imágenes se almacenan especialmente.
Este ejemplo muestra el método para cargar archivos almacenados en dos ubicaciones. Después de cargar, como extensión, también se agrega la función de ver archivos cargados y descargar archivos cargados.
Preparación
Configurar los paquetes de SpringMVC e Importar Commons
Configurar el analizador de carga de archivos en MVC-Servlet.xml
<!-Archivo de carga Parser-> <bean id = "multipartresolver"> <propiedad name = "maxUploadSize" value = "1000000"/> <propiedad name = "defaultEncoding" value = "utf-8"/> </ bean>
Almacenado en áreas de recursos estáticos
1. Ubicación de almacenamiento:
Almacenado en el proyecto, por lo que la ruta es la ruta relativa al proyecto.
/{YourProject}/webapp/static/img
2. Configure el controlador de respuesta
@ControllerPublic Class uploadController {@getmapping ("/upload") public String uploadHandler () {return "upload"; } @PostMapping ("/upload/static") public void Writostatic (httpservletRequest request, redirectAtTRibutes redirectAtTributes, @RequestParam ("FileName") MultipartFile archivo) {if (! File.IsEmpty ()) {// Obtener la carpeta de Target = Solicitar. "estático/img/"; // Obtenga el nombre del archivo de origen cargado por la cadena del usuario filename = file.getoriginalFileName (); // crear un archivo de archivo nuevo archivo1 = nuevo archivo (ruta, nombre de archivo); // Escribe el archivo a file.transferto (file1); redirectattributes.AddFlashAttribute ("Mensaje", "Cargar al éxito estático"); return "redirect:/upload"; } else {redirectatTributes.AddFlashAttribute ("Mensaje", "El archivo de carga no puede estar vacío"); return "redirect:/upload"; }}}Almacenar en el servidor
1. Ubicación de almacenamiento de este ejemplo:
Almacenada en una determinada ubicación del servidor, no tiene nada que ver con el proyecto, por lo que la dirección es una ruta absoluta.
/Usuarios/Mac/Desktop/IMGTemp/, es la ruta absoluta al directorio.
2. Configure el controlador de respuesta
... @postmapping ("/upload/disk") public string writeTetEdisk (httpservletRequest request, @RequestParam ("FileName") MultipartFile File, redirectatTributes redirectAtTributes) {if (! File.isEmpty ()) {// Obtenga el nombre de archivo de origen String = File.getoriginalfilename ();); // Obtenga la ruta de la carpeta de archivo Guardar string path = "/users/Mac/Desktop/imgtemp/"; // crear un archivo de archivo nuevo archivo1 = nuevo archivo (ruta, nombre de archivo); // Escribir archivo file.transferto (archivo1); }} ...Parte extendida (ver y descargar archivos)
Dado que la respuesta es pasar el archivo en forma de flujo, necesitamos establecer correctamente el tipo MIMIE de la respuesta para que el navegador analice correctamente. El tipo MIMIE predeterminado del archivo de aplicación es la aplicación/octet-stream. Después de que MIME esté configurado en este valor, el navegador no ejecutará o solicitará automáticamente dichos archivos, y descargará directamente el archivo al área local en forma de tratamiento adjuntos.
Para obtener más interpretaciones de Mimie, consulte este artículo
Si queremos personalizar el nombre del archivo de descarga, necesitamos establecer el mensaje de disposición de contenido.
Disposición de contenido El encabezado del mensaje indica la forma de la respuesta que se mostrará, ya sea en línea (es decir, una página web o parte de una página), o descargada y guardada localmente en forma de archivo adjunto.
Para obtener más información sobre la disposición de contenido, consulte este artículo
...@getMapping ("/descargar/bydefault") public void getImgbyDefault (@RequestParam String FileName, @RequestParam (requerido = false, defaultValue = "") String Savename), httpServletResponse Respuesta {if (StringUtils.isempty (FileName)) {Response.senderRor (404); devolver; } // ruta de la cadena de almacenamiento de archivos ruta = "/usuarios/mac/escritorio/imgtemp/"; // archivo nuevo archivo de archivo = nuevo archivo (ruta, nombre de archivo); if (! file.exists ()) {Response.sendError (404); devolver; } // Si el nombre de SaveName del parámetro de solicitud no está vacío, descargue el archivo if (! StringUtils.isEmpty (Savename)) {// Establezca la longitud de respuesta Respuesta.SetContentLength ((int) file.length ()); // Establezca el tipo MIME de la respuesta a la respuesta de aplicación/octet-stream.setContentType (mediatype.application_octet_stream_value); Savename = new String (Savename.getBytes ("UTF-8"), "ISO8859-1"); // Establecer el contenido-disposición al archivo adjunto; FileName = Savename Response.Setheader (httpheaders.content_disposition, "adjunto; filename =/" "+Savename+"/""); } // leer el archivo inputStream es = nuevo fileInputStream (archivo); OutputStream OS = Response.getOutputStream (); // archivo de salida ioutils.copy (is, os); OS.Flush (); os.close (); is.close ();}También podemos usar el convertidor bytearrayhttpMessageConverter que viene con los archivos de SpringMVC para salir, lo que implementa la interfaz httpmessageConverter. Se puede leer toda la información de la solicitud de MIME, y el MIME de la información de respuesta es la aplicación/octet-stream
...@getMapping ("/descargar/byconvert") public httpentity <byte []> getImgByConvert (@RequestParam String filename, @RequestParam (requerido = false, defaultValue = "") String SaveName) {if (StringUtils.IsEmpty (FileName)) {return New thiseentity <> (httpStatus.not_not); } String path = "/users/Mac/Desktop/imgtemp/"; Archivo archivo = nuevo archivo (ruta, nombre de archivo); if (! File.Exists ()) {return New ResponseEntity <> (httpstatus.not_found); } Encabezados httpheaders = new httpheaders (); if (! StringUtils.isEmpty (SaveName)) {Headers.SetContentType (Mediatype.Application_OCTET_STREAM_VALUE); Headers.setContentLength (file.length ()); Savename = new sting (Savename.getBytes ("UTF-8"), "ISO8859-1"); Headers.Add (httpheaders.content_disposition, "adjunto; filename =/" " + Savename +"/""); } else {headers.setContentType (mediatype.image_png); } return new httpentity <> (fileCopyUtils.copytobytearray (archivo), encabezados);}cargar.jsp
<%@ página contentType = "text/html; charset = utf-8" lenguaje = "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> <fead> <meta charset = "utf-8"> <meta name = "viewport" content = "width = width de dispositivo, usado-scalable = no, escalera inicial = 1.0, maximum-scale = 1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <link rel="stylesheet" href="/static/bootstrap-3.3.5-dist/css/bootstrap.css" rel="external nofollow" ></head><body><div> <h1>Upload file dispersar </h1> <c: if test = "$ {no es un mensaje vacío}"> <h2> $ {mensaje} </h2> </c: if> <form: form: form de formular = "multipart/form de formular" Action = "/upload/upload/static"> <p> upcar a/web/static </p> <etiqueta para = ">" iba de úbd iba carga: </etiqueta> <pinte ". name = "uploadfile"> <boton> enviar </boton> </form: form> <form: form: enctype = "multipart/form-data" Action = "/upload/disk"> <p> cargar en disk </p> <label a href = "/descargar/bydefault? FileName = dubbo.png" rel = "externo nofollow" target = "_ blank"> Use el método predeterminado para ver las imágenes dubbo cargadas en disco </a> </boton> <boton> <a href = "/descargar/bydefault? Método predeterminado para descargar imágenes dubbo </a> </boton> </div> <div> <boton> <a href = "/descargar/byconvert? FileName = dubbo.png" rel = "externo nofollow"> Use el método predeterminado para descargar imágenes dubbo </a> </botte> </div> <div> <button <button <a href = "/descargar/byconvert? rel="external nofollow" target="_blank">Use MVC converter to view dubbo images uploaded to Disk</a> </button> <button> <a href="/download/byConvert?fileName=dubbo.png&saveName=dub.png" rel="external nofollow" >Use MVC converter to download dubbo images uploaded to Disk</a> </botón> </div> </div> </body> </html>Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.