Este artigo compartilha o código de implementação específico para fazer upload e download de arquivos STRUTS2 para sua referência. O conteúdo específico é o seguinte
1. Upload de arquivo
Carregue o componente de arquivo enviado por struts,
Recepção:
1) Postagem do método de envio
2) Multipart/formulário de tipo de formulário
3) Tipo de entrada = arquivo
Nos bastidores:
Componente FileUpload fornecido pelo Apache
Categoria central:
FileItemFactory FileItem Factory
ServletFileUpload Core Class para upload de arquivo no servlet
O FileItem encapsula as informações dos itens de arquivo do formulário carregado. Em suma, o upload de arquivo é mais problemático para processar.
O upload de arquivo do Struts <r /> upload de arquivo interceptador nos ajuda a função de upload de arquivo tardio
<interceptor name = "fileUpload"/>
upload.xml
<Truts> <package name = "upload_" estends = "struts-defafult"> <!-Nota: a palavra-chave "fileUpload" não pode ser usada com a palavra-chave "fileUpload"-> <ação name = "FileUplOadaction"> <!-Restringir os tipos de arquivos:-> <Interceptor-rate "> <! name = "FILEUPLOAD.allowDextensions"> txt, jpg, jar </param> <!-restringe os tipos de arquivos em execução [usados ao mesmo tempo acima, obtenha interseção] <param name = "fileUpload.allowedTypes"> text/plana </param>-> </intercetor-ref> <soulTypes "SUCCEST"> <resultado name = "input">/e/error.jsp </resultado> </action> </cackage> </stuts>
upload.jsp
<Body> <form ação = "$ {pageContext.request.ContextPath}/fileUploadaction" Method = "post" Enctype = "Multipart/Form-Data"> Nome de usuário: <input Type = "Text" Nome = "Username"> <br/> Arquivo: <input Type = "File" NOME = "FILE "1" File "1 "File "1"> </morm> </body>error.jsp
<body> error.jsp <br/> <!-Veja todas as mensagens de erro geradas pela estrutura do Struts durante o tempo de execução-> < %@ taglib uri = "/struts-tags" prefix = "s" %> <s: fielderror> </s: fielderror> </body> success.jsp <body> success.jsp </body>
Código central
FileUpload .class
classe pública FileUpload estende o ACTIONSupport {// Formulário correspondente: <input type = "file" name = "file1"> arquivo privado arquivo1; // Nome do arquivo Private String file1Filename; // Tipo de arquivo (MIME) Private String file1ContentType; public void setFile1 (arquivo file1) {this.file1 = file1; } public void setFile1Filename (String file1Filename) {this.file1filename = file1filename; } public void setFile1ContentType (String file1ContentType) {this.File1ContentType = FILE1CONTENTTYPE; } @Override public String Execute () lança Exceção {/********* Obtenha o arquivo carregado e processe ********* // Carregar o arquivo no diretório de upload // Obtenha o caminho do diretório carregado caminho da string = servletActionContext.getServletContext (). // Crie o arquivo do arquivo de destino Destfile = new File (Path, File1Filename); // copie o arquivo carregado para o FileUtils.copyfile de destino (FILE1, DESTFILE); sucesso de sucesso; }} Detalhes de processamento de upload de arquivo
um. Limite de tamanho do arquivo
O upload de arquivo máximo suportado por structs é 2M por padrão e é modificado por constantes:
<!-4. Modifique o tamanho máximo dos arquivos enviados para 30m->
<constante name = "struts.multipart.maxsize" value = "31457280"/>
b. Restrinja o tipo permitido de arquivos carregados: apenas os interceptores de arquivos com sufixos txt/jpg são permitidos: os parâmetros de injeção para limitar os tipos de upload de arquivos
<!-restringe o tipo de arquivo enviado-> <interceptor-ref name = "defaultStack"> <!-restringe a extensão do arquivo em execução-> <param name = "fileUpload.allowedextensões"> txt, jpg, jar </param> <!-restringem o tipo de execução [usado na mesma hora como acima, como acima, obtenha o interno, </param> <!-Restre <! name = "fileUpload.allowedTypes"> text/simples </param>-> </soceptor-ref>
2. Faça o download do arquivo
Download de arquivos de struts, 2 maneiras:
Método 1: Escreva dados do fluxo de bytes no navegador através do objeto de resposta; Defina o método do cabeçalho da resposta para o download 2: método struts
Baixe o arquivo Struts:
Copie o código da seguinte
Primeiro, observe que você cria uma nova pasta de upload no diretório Webroot e coloque o arquivo que deseja fornecer à pasta baixada.
upload.xml
<ação name = "Down_*" Method = "{1}"> <!-List Display-> <resultado name = "list">/e/list.jsp </resultado> <!-Operação de download-> <Nome do resultado = "Download" type = "Stream"> <!-O tipo de arquivo em execução Download: Especificado como todos os tipos de arquivo binário-> <parampe = "Contenttype Retorne a propriedade do fluxo [na verdade getAtTRInputStream ()]-> <param name = "inputName"> attriNputStream </am> <!-o cabeçalho de download, incluindo: o nome do arquivo exibido pelo navegador-> <param name = "contentDisposition"> anexamento; filename = $ {DownFilename} </buff </buffer = name = "buffersize"> 1024 </amp> </sould> </action>list.jsp
<Body> <tabela align = "Center"> <tr> <td> número </td> <td> Nome do arquivo </td> <td> operação </td> </td> < %@tglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" c "c" c "c" c "c" c :names "e" http://java.sun.com/jsp/jstl/core "prefix =" c "c. itens = "$ {filenames}" varstatus = "vs"> <tr> <td> $ {vs.count} </td> <td> $ {filename} </td> <td> <!-construir um url-> <c: url var = "url" value = "Down_down"> <c: value = "$ {filename}"> </c: param> </c: url> <a href = "$ {url}"> download </a> </td> </tr> </c: foreach> </ table> </body>Downação
/***Download do arquivo*1. Mostre a lista de todos os arquivos a serem baixados*2. Download do arquivo** /public class DownloadAction Extende o Actionupport { /********************* 1. Mostre a lista de todos os arquivos a serem baixados ****************************/public string list () lança Exceção {// Obtenha o caminho do diretório de upload Path String Path = ServletActionContext.getServletContext (). GetRealPath ("/upload"); // arquivo de objeto de diretório arquivo = novo arquivo (caminho); // Obtenha o nome do arquivo de todos os arquivos a serem baixados string [] filenames = file.list (); // Salvar actionContext ac = actionContext.getContext (); // Obtenha o mapa que representa o mapa da solicitação (o segundo caminho) <string, objeto> request = (map <string, object>) ac.get ("request"); request.put ("nomes de arquivos", nomes de arquivos); retornar "lista"; } /****************** 2. Download do arquivo ***************************** public void setFilename (string filename) {// lide com o problema nos parâmetros aprovados (obtenha envio) tente {filename = new string (filename.getBytes ("iso8859-1"), "utf-8"); } Catch (UnsupportEdEncodingException e) {THROW NOVA RUNTIMEEXCECTION (E); } // atribui this.FileName = FileName; } // 2. Faça o download do método de negócios enviado (configure o fluxo em struts.xml) public string down () lança a exceção {return "download"; } // 3. Métodos para retornar o fluxo do arquivo public inputStream getAtTRInputStream () {return servletActionContext.getServletContext (). GetResourceasStream ("/upload/" + arquivo de arquivo); } // 4. Faça o download do nome do arquivo exibido (nome do arquivo exibido pelo navegador) public String getDownFilename () {// A codificação chinesa é necessária, tente {filename = urlencoder.encode (nome do arquivo, "utf-8"); } Catch (UnsupportEdEncodingException e) {THROW NOVA RUNTIMEEXCECTION (E); } retornar o nome do arquivo; }}O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.