Ao trabalhar em sistemas B/S, geralmente envolve o upload de arquivos e o download de arquivos. Antes de nos conectarmos à estrutura STRUTS2, usamos o componente FileUpload do subproject Commons no Apache para fazer upload de arquivos. No entanto, se fizermos isso, o código parece complicado e inflexível. Após o aprendizado do Struts2, o STRUTS2 fornece um melhor mecanismo de implementação para upload e download de arquivos. Aqui vou explicar o código-fonte para upload de arquivo único e upload de vários arquivos. Aqui, precisamos importar dois arquivos JAR enviados por download de arquivo, um é o Commons-FileUpload-1.2.2.jar, e o outro é commons-io-2.0.1.jar.
Upload de arquivo único struts2:
Primeiro de tudo, existe uma página de upload de arquivo JSP. Isso é relativamente simples, é um formulário com uma caixa de upload de arquivos.
<!-Ao fazer o upload do arquivo, o método de envio do formulário deve ser postado, porque o arquivo binário pode ser muito grande ao fazer o upload do arquivo. Há também o atributo ENCTYPE. Este atributo deve ser escrito como multipartida/formulário-dados, caso contrário, será enviado para o servidor no texto binário-> <formulário de ação = "FILEUPLOAD.Action" Method = "post" Enctype = "Multipart/Form-Data"> Nome de usuário: <input Type = "text =" username "> <bring> <bring: <input Type =" FILDE = "FILHE =" Nome ") value = "submeter"> </morm>
Em seguida, é a parte do FileUploadaction do código. Como o STRUTS2 fornece um bom mecanismo de estágio para fazer upload e download, precisamos escrever muito pouco código em ação:
classe pública FileUploadAction estende o ActioPupport {private string nome de usuário; // Observe que o arquivo não se refere ao próprio arquivo enviado pelo JSP front-end, mas o arquivo enviado para armazená-lo sob o arquivo de arquivo privado da pasta temporária; // o nome do arquivo enviado String Private FileFilename; // O tipo MIME do arquivo enviou String privada FileContentType; public String getUserName () {return Username; } public void setUserName (string userName) {this.username = nome de usuário; } public file getFile () {return file; } public void setFile (arquivo de arquivo) {this.file = file; } public String getFileFilename () {return fileFileName; } public void setFileFilename (string fileFilEName) {this.filefilename = FileFilename; } public string getFileContentType () {return fileContentType; } public void setFileContentType (String FileContentType) {this.FileContentType = FileContentType; } @Override public String Execute () lança Exceção {String root = servletActionContext.getServletContext (). GetRealPath ("/upload"); InputStream is = new FileInputStream (arquivo); OutputStream OS = new FileOutputStream (novo arquivo (root, fileFileName)); System.out.println ("FileFilename:" + FileFilename); // Como o arquivo é um arquivo armazenado em uma pasta temporária, podemos imprimir o nome do arquivo e o caminho do arquivo para ver se é o mesmo que o arquivo fileFileName anterior.out.println ("arquivo:" + file.getName ()); System.out.println ("arquivo:" + file.getPath ()); byte [] buffer = novo byte [500]; int length = 0; while (-1! = (length = is.read (buffer, 0, buffer.length))) {os.Write (buffer); } os.close (); is.close (); sucesso de sucesso; }}Primeiro de tudo, precisamos deixar claro que o arquivo aqui não se refere ao arquivo carregado pelo JSP. Quando o arquivo for enviado, o STRUTS2 procurará primeiro o local de armazenamento especificado por struts.multipart.savedir (isso está no padrão.properties). Podemos criar um novo arquivo de propriedades do Struts.Properties para especificar o local de armazenamento de arquivos temporários. Se não for especificado, o arquivo será armazenado no Apache-Tomcat-7.0.29/Work/Catalina/Localina/Diretório. Em seguida, podemos especificar o local de armazenamento após o upload do arquivo e apenas escrevê -lo no fluxo através do fluxo de saída. Neste momento, podemos ver o arquivo que carregamos na pasta.
Depois de fazer upload do arquivo, ainda precisamos fazer o download. De fato, o princípio do download de struts2 é muito simples. É para definir um fluxo de entrada e, em seguida, gravar o arquivo no fluxo de entrada. A configuração de chave ainda é configurá -la no arquivo de configuração do struts.xml:
O código FileDownLoadAction é o seguinte:
classe pública fileDownLoadAction estende o ACOCTIPPORT {public inputStream getDownLoadFile () {return servletActionContext.getServletContext (). getResourceasStream ("Livro de upload/endereço em 4 de setembro de 2012.xls"); } @Override public String Execute () lança Exceção {return Success; }}Vamos ver que essa ação apenas define um fluxo de entrada e, em seguida, fornece um método getter. Em seguida, vamos dar uma olhada no arquivo de configuração de struts.xml:
<ação name = "filedOwnload"> <resultado name = "success" type = "stream"> <param name = "contentDispition"> anexment; filename = "Livro de endereço 4 de setembro de 2012.xls" </param> <param name = "inputName"> downloadfile </param> </resultado </action>
Há várias coisas em que precisamos prestar atenção no arquivo de configuração do Struts.xml. Primeiro de tudo, o tipo de resultado. No passado, definimos uma ação. Basicamente, não escrevemos o atributo de tipo no resultado, porque os padronizam para solicitar o encaminhamento (Dispatcher). Além desse atributo, geralmente existem valores como redirecionamento (redirecionamento). Aqui, porque estamos usando o download do arquivo, o tipo deve ser definido como tipo de fluxo, informando a ação. Este é o resultado do download do arquivo. Geralmente, existem subelementos de parâmetros no elemento de resultado. Isso é usado para definir os parâmetros ao baixar o arquivo. e esta propriedade é para obter o fluxo de entrada do arquivo em ação. O nome deve ser o mesmo que o atributo do fluxo de entrada em ação. Em seguida, o atributo ContentDisposition é o atributo ContentDispition. Essa propriedade é geralmente usada para especificar como queremos processar o arquivo baixado. Se o valor for um anexo, uma caixa de download será exibida, permitindo que o usuário escolha o download. Se esse valor não estiver definido, o navegador verificará primeiro se abrirá o arquivo baixado. Se puder, abrirá diretamente o arquivo baixado (é claro, não é isso que precisamos). Outro valor é o nome do arquivo, que é o nome do download do arquivo solicitado pelo arquivo ao baixar. Depois de configurar essas informações, podemos implementar a função de download de arquivos.
STRUTS2 Vários arquivos Upload :
De fato, o princípio do upload de vários arquivos é o mesmo que o upload de arquivo único. Um único upload de arquivo é um único arquivo e uma lista de coleta de <File> ou uma matriz de arquivo [] é carregada. Primeiro, vamos dar uma olhada no código da parte JSP front-end. Aqui usei o jQuery para implementar as caixas dinâmicas de adição de arquivos e exclusão dinâmica:
<script type = "text/javascript" src = "script/jQuery-1.8.1.js"> </script> <script type = "text/javascript"> $ (function () {$ ("#botão"). clique (function () {var html = $ ("<input Type = 'FILTE"). name = 'Button' value = 'delete'> <br> "); $ ("#body div "). Anexe (html) .append (button); button.click (function () {html.remove (); button.remove ();})})}) </script> </head> <body id" Enctype = "Multipart/Form-Data"> Nome de usuário: <input type = "text" name = "userName"> <br> Arquivo: <input type = "file" name = "file"> <input type = "buttão" value = "add" id = "buttão"> <br> <brod> </div> <pput "(subster" = "snded" ida ""> <br> <br> </div> </div> <put "(subster" = "snded" = "" "> <br> <br> <//divy> <put" typ = "sigin" = ") Os nomes dos arquivos devem ser nomeados arquivos e, em seguida, o código de ação para fazer upload de vários arquivos é o seguinte:
classe pública FileUploadAction2 estende o ActioPorppport {private String UserName; // Aqui usamos a lista para armazenar arquivos carregados. O arquivo também refere -se a arquivos temporários em pastas temporárias, em vez do arquivo prateado da lista privada de arquivos realmente enviados; // Esta lista armazena o nome do arquivo, correspondente ao arquivo na lista <File> Lista privada <String> FileFilename; Lista privada <String> FileContentType; public String getUserName () {return Username; } public void setUserName (string userName) {this.username = nome de usuário; } list public <File> getFile () {return file; } public void setFile (list <File> arquivo) {this.file = file; } list public <string> getFileFilename () {return fileFilename; } public void setFileFilename (list <string> fileFilename) {this.filefilename = fileFileName; } Lista pública <String> getFileContentType () {return fileContentType; } public void setFileContentType (List <String> FileContentType) {this.FileContentType = FileContentType; } @Override public String Execute () lança Exceção {String root = servletActionContext.getServletContext (). GetRealPath ("/upload"); for (int i = 0; i <arquivo.size (); i ++) {inputStream is = new FileInputStream (file.get (i)); OutputStream OS = new FileOutputStream (novo arquivo (root, fileFileName.get (i))); byte [] buffer = novo byte [500]; @Suppresswarnings ("não utilizado") int length = 0; while (-1! = (length = is.read (buffer, 0, buffer.length))) {os.Write (buffer); } os.close (); is.close (); } retornar sucesso; }}Isso também o escreve em um fluxo de saída, para que possamos ver vários arquivos enviados na pasta
O próximo download de arquivo é exatamente o mesmo que o download do arquivo agora e o mesmo é o Struts.xml, então não vou repeti -lo aqui.
Resumo: Em geral, o mecanismo de upload e download de arquivos fornecido pelo Struts2 simplifica muito do nosso código. Podemos usar esse mecanismo em projetos futuros. Também podemos usar o componente FileUpload para fazer upload de arquivos. Tudo isso é determinado por preferências pessoais!
Há muito conteúdo sobre o upload de arquivos e o download de funções em Javaweb, obrigado por sua leitura.