Escreva na frente
Quando se trata de uploads de arquivos, devemos primeiro falar sobre a lógica de negócios. Se todos puderem ver os arquivos enviados (como anúncios ou banners na página inicial), colocamos a imagem na área de recursos estáticos (o mesmo local que CSS e JS). Se o arquivo estiver protegido (como o usuário, só poderá visualizar as fotos enviadas por ele), armazenamos -o em um local no servidor onde as imagens são especialmente armazenadas.
Este exemplo mostra o método de fazer upload de arquivos armazenados em dois locais. Após o upload, como uma extensão, também é adicionada a função de visualizar arquivos enviados e baixar arquivos enviados.
Preparação
Configure os pacotes Springmvc e importe o Commons
Configurar o analisador de upload de arquivos em mvc-servlet.xml
<!-Analisador de upload de arquivo-> <bean id = "multipartresolver"> <propriedade name = "maxuploadSize" value = "1000000"/> <names name = "defaultEncoding" value = "utf-8"/> </ Bean>
Armazenado em áreas de recursos estáticos
1. Local de armazenamento:
Armazenado no projeto, portanto, o caminho é o caminho em relação ao projeto.
/{yourproject}/webapp/static/img
2. Configure o manipulador de resposta
@ControllerPublic Classe uPLOPLONTROLLER {@GetMapping ("/upload") public String UPLOPLEHANDLER () {return "upload"; } @PostMapping ("/upload/static") public void writostatic (solicitação httpServletRequest, redirectattributes redirectattributes, @requestParam ("fileName") get stringfile) {if (! File.isempty ()) {// get ting string string Pather "estático/img/"; // Receba o nome do arquivo de origem enviado pelo usuário string filename = file.getoriginalfilename (); // Crie um novo arquivo de arquivo file1 = novo arquivo (caminho, nome do arquivo); // Escreva o arquivo para file.transferto (file1); redirectattributes.addflashattribute ("mensagem", "upload para sucesso estático"); retornar "redirecionar:/upload"; } else {redirectattributes.addflashattribute ("mensagem", "o arquivo de upload não pode estar vazio"); retornar "redirecionar:/upload"; }}}Armazene no servidor
1. Localização de armazenamento deste exemplo:
Armazenado em um determinado local no servidor, não tem nada a ver com o projeto, portanto o endereço é um caminho absoluto.
/Usuários/Mac/Desktop/imgtemp/, é o caminho absoluto para o diretório.
2. Configure o manipulador de resposta
... @pós -mapping ("/upload/disk") public string writeTodisk (solicitação httpServletRequest, @requestParam ("fileName") FILETFILE, redirectattributes redirectattributes) {if (! File.isempty ()) {// obtenha o nome de origem string; // Obtenha o caminho da pasta Salvar Arquivo Path String Path = "/Users/Mac/Desktop/imgtemp/"; // Crie um novo arquivo de arquivo file1 = novo arquivo (caminho, nome do arquivo); // gravar arquivo file.transferto (file1); }} ...Parte estendida (visualização e download de arquivos)
Como a resposta é passar o arquivo na forma de um fluxo, precisamos definir corretamente o tipo Mimie da resposta para ser analisado corretamente pelo navegador. O tipo de imitação padrão do arquivo de aplicativo é aplicativo/stream de octeto. Depois que o MIME é definido como esse valor, o navegador não executará automaticamente ou solicitará automaticamente para executar esses arquivos e baixará diretamente o arquivo na área local na forma de tratamento de anexos.
Para mais interpretações de Mimie, verifique este artigo
Se queremos personalizar o nome do arquivo de download, precisamos definir a mensagem de disposição de conteúdo.
Disposição de conteúdo O cabeçalho da mensagem indica que a forma da resposta a ser exibida, esteja em linha (ou seja, uma página da web ou parte de uma página), ou baixada e salva localmente na forma de um anexo.
Para mais informações sobre a disposição de conteúdo, verifique este artigo
...@getMapping ("/download/bydefault") public void getImgbyDefault (@RequestParam String filename, @RequestParam (requerir = false, defaultValue = "") string SaveName), httpServLeSponse Response {if (stringUtils.isempty)), respostas. retornar; } // caminho do arquivo de armazenamento de arquivos PATH = "/Users/Mac/Desktop/imgtemp/"; // novo arquivo de arquivo arquivo = novo arquivo (caminho, nome do arquivo); if (! file.exists ()) {Response.SenderRor (404); retornar; } // Se o parâmetro de solicitação SAVENAME não estiver vazio, faça o download do arquivo se (! StringUtils.isEmpty (SaveName)) {// Defina o comprimento da resposta. // Defina o tipo MIME da resposta para Application/Octet-Stream Response.SetContentType (MediaType.Application_octet_stream_value); SaveName = new String (SaveName.getBytes ("UTF-8"), "ISO8859-1"); // defina conteúdo-disposição para anexação; FILENAME = SaveName Response.setheader (httpheaders.content_disposition, "anexo; nome do arquivo =/" ""+SaveName+"/" "); } // leia o arquivo inputStream is = new FileInputStream (arquivo); OutputStream OS = Response.getOutputStream (); // File de saída ioutils.copy (IS, OS); os.flush (); os.close (); is.close ();}Também podemos usar o conversor de bytearrayhttpmessageConverter que vem com o SpringMVC aos arquivos de saída, o que implementa a interface httpmessageConverter. Todas as informações de solicitação MIME podem ser lidas e a MIME das informações de resposta é aplicação/stream de octeto
...@getMapping ("/download/byConvert") public httpentity <byte []> getImgbyConvert (@RequestParam String filename, @RequestParam (requerir = false, defatValue = "") string Savename) {if (stringils.isempty (fillename)) {Return) {>; } String path = "/users/mac/desktop/imgtemp/"; Arquivo de arquivo = novo arquivo (caminho, nome do arquivo); if (! file.exists ()) {retorna nova resposta <> (httpstatus.not_found); } Httpheaders headers = 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_dispition, "anexo; nome do arquivo =/" " + savenename +"/""); } else {headers.setContentType (mediatype.image_png); } Retornar nova httpentity <> (FileCopyUtils.copyTobyTearray (arquivo), cabeçalhos);}upload.jsp
<%@ página contenttype = "text/html; charset = utf-8" idioma = "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> <head> <meta charset = "utf-8"> <meta name = "viewport" = "width = device-width, user-scalable = não, scale =" 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 espalhe </h1> <c: if test = "$ {não vazio message}"> <h2> $ {message} </h2> </c: if> <form: form rype = "multipart/form-data" action = "/upload/static"> <p> upload para/web/static </p> <para = = = =) " Nome = "UploadFile"> <Button> Submite </botão> </form: form> <form: formbype = "multipart/form-data" action = "/upload/disk"> <p> upload para disco </p> <butty para = ""> FILHAÇÃO </LABEL <> href = "/download/bydefault? FileName = dubbo.png" rel = "Nofollow externo" Target = "_ Blank"> Use o método padrão para visualizar as imagens do dubbo enviadas para disco </a> </button> button> <a href = "/download/bydefault? Filename = dubbo.pn> Método padrão para baixar imagens dubbo </a> </button> </div> <div> <but uma button> <a href = "/download/byconvert? filename = dubbo.png" rel = "Nofollow externo"> use o método padrão para baixar imagens dubbo </a> </button> </div "> <butt> <butt> <butt para hre para baixar imagens dubbo </a> </button> </div. Rel = "Nof siga externo" Target = "_ Blank"> Use o conversor MVC para visualizar imagens do Dubbo carregadas para disco </a> </butut> <butter> <a href = "/download/byconvert? FileName = Dubbo.png & Savename = dub.png" Rel = "Externo NOFollow"> Use Mv MDA </div> </div> </body> </html>O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.