Vamos falar sobre os princípios de fazer upload e download da implementação da instância do STRUTS2:
Struts 2 é carregado através do arquivo FileUpload do Commons.
O FileUpload do Commons usa o FileUpload Interceptor para vincular o arquivo a uma instância de ação salvando os dados do HTTP em uma pasta temporária e, em seguida, o Struts usa o FileUpload Interceptor. Assim, podemos operar os arquivos enviados pelo navegador de maneira local.
Implementação específica :
1. Página Create Index.jsp
<Body> <s: formaction = "upload" method = "post" tem tema = "simples" Enctype = "Multipart/form-Data"> <tabela align = "Center"> <tr> <t> </td> </tr> <tr> <td> <s: submite type = "button" value = "submit" onclick = "return checkf ()"/> </td> <td> <s: reset value = "reset"> </s: reset> </td> </tr> </tabela> <tating. "> center"> </s: href = "<s: url value = 'download.action'> <s: param name = 'filename'> test.txt </s: param> </s: url>"> download </a> </td> </tr> </tabela> </s: form> </body>
Criar Result.jsp Página
<Body> <s: form> <div Style = "Border: 1px Solid Black"> Arquivo Carregado com sucesso: <br> <ul syle = "list-estilo-tipo: decimal"> <s: iterator value = "#request.filename" id = "file" status "" status> <li> <s:/</> </li>
Obviamente, não se esqueça de adicionar referência de tags de struts2 em cada página < %@taglib prefix = "s" uri = "/struts-tags" %>
2. Crie um arquivo updown.js e faça referência ao index.jsp
function checkf () {var arquivos = document.getElementsByName ("arquivo"); if (arquivos [0] .Value.Length! = 0) {return true; } else {alert ("Selecione o arquivo"); retornar falso; }} função addmore () {var td = document.getElementById ("mais"); var br = document.createElement ("Br"); var input = document.createElement ("input"); var bottone = document.createElement ("entrada"); input.type = "arquivo"; input.name = "arquivo"; Button.Type = "Button"; Button.Value = "Remover"; Button.OnClick = function () {TD.RemoveChild (BR); td.RemoVechild (entrada); td.removeChild (botão); } td.appendChild (Br); td.appendChild (entrada); td.appendChild (botão); } 3. Crie UpdOwnLoadAction.java
pacote com.action; importar java.io.file; importar java.io.fileInputStream; importar java.io.fileNotFoundException; importar java.io.fileOutputStream; import java.io.Inputren; javax.servlet.http.httpServletRequest; importar com.opensymphony.xwork2.actionupport; importar org.apache.struts2.servletActionContext; classe pública UpdOwnLoadActionAction estende a ação da ação {estática privada final Private List <File> arquivo; // correspondente a tags de arquivo na lista privada da JSP <String> fileFilename; // Lista privada <String> FileContentType; // private string filename; // obtenha o parâmetro Pram em jsp @suppresswarnings ("depraCation") // Raiz Atualização pública String uplroadfiile () ServletActionContext.getServletContext (). GetRealPath ("/upload"); // upload path system.out.println (root); InputStream inputStream; Arquivo Destfile; OutputStream OS; for (int i = 0; i <arquivo.size (); i ++) {inputStream = new FileInputStream (file.get (i)); destfile = novo arquivo (root, this.getFileFileName (). get (i)); OS = new FileOutputStream (Destfile); byte [] buffer = novo byte [400]; int length = 0; while ((length = inputStream.read (buffer))> 0) {os.Write (buffer, 0, comprimento); } inputStream.close (); os.close (); } HttpServletRequest request = servletActionContext.getRequest (); request.setAttribute ("nome do arquivo", FileFileName); sucesso de sucesso; } // download de arquivo public inputStream getDownLoadFile () lança fileNotfoundException, não supportEnCodingException {System.out.println (getFileName ()); // Se o nome do arquivo de download for chinês, execute o personagem que codifica a conversão ServletActionContext.getResponse (). Setheader ("content-Disposition", "Appion; filename =" + java.net.urlencoder.encode (nome do arquivo, "utf-8"); InputStream inputStream = new FileInputStream ("f:/" // use o caminho absoluto para baixar o arquivo "test.txt" deste caminho + this.getFileName ()); System.out.println (inputStream); retornar inputStream; } // Download public String DownloadFile () lança Exceção {return Success; } public string getFilename () lança UnsupportEdEncodingException {return filename; } public void setFilename (string filename) lança UnsupportEdEncodingException {this.filename = new String (filename.getBytes ("iso8859-1"), "utf-8"); }}Nota: Os métodos GET e Set do atributo foram omitidos.
Quarto, finalmente o arquivo de configuração
1. Configuração do web.xml
<filter> <filter-name> struts2 </filter-name> <filter-class> org.apache.struts2.dispatcher.filterdispatcher </filter-class> </ftruter> <filter-mapping> <filter-Name> struts2 </filter-name> <url--Tattern>/*</url-Pattern> </limter-name> <url-pattern>/*</url-Pattern>
2 struts.xml Configuração
<Truts> <constante name = "struts.i18n.encoding" value = "utf-8"> </stain> <nome constante = "struts.multipart.savedir" value = "f:/"> </constant> <names = "struts2" extens = "struts-d-default"> <ction> name = "struts2" ("" struts-d-default "> name = "succcess">/jsp/resultado.jsp </resultado> <interceptor-ref name = "fileUpload"> <!-maximumsize (opcional)-o comprimento máximo do arquivo enviado para a ação permitida por esse interceptador (em unidades de byte). Observe que este parâmetro não tem nada a ver com as propriedades definidas no webwork.properties. O padrão é 2MB-> <param name = "maximumsize"> 409600 </amp> <!-AllowTypes (Opcional)-Uma lista separada por vírgula de tipos de contentType (como texto/html). Essas listas são os Types de conteúdo permitidos por esse interceptador passarem para a ação. Se não estiver especificado, qualquer tipo de upload é permitido .--> <param name = "allowtypes"> text/plany </amul> </interceptor-ref> <interceptor-ref name = "defaultStack"> </interceptor-ref> </action> <ação name = "download =" downloadfile "> <1 resultado =" success "success" success "type =" type = "type)" streaming "" Todos os tipos -> <param name = "contentType"> aplicativo/txt; </param> <!-Especifique o nome do arquivo e o método de exibição baixado, mas preste atenção ao código distorcido dos nomes chineses. A solução é: codificação de processamento-> <!-ContentDispition é o método de processamento do download de arquivos, incluindo embutido e anexo. O padrão está embutido. Ao usar anexos, ele é configurado da seguinte forma: anexo; nome do arquivo = "nome do arquivo". -> <param name = "ContentDispition"> Appionment; filename = "$ {FileName}" </amp> <!-Get InputStream do Método GetDownloadFile ()-> <param name = "inputName"> Downloadfile </amam> <!-especificar o tamanho do cache do arquivo/<Param-> <Param> " </package> </truts>Um upload simples e multifuncional simples e o download de arquivo único são implementados.
O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.