A especificação Servlet 3.0 HTTPServletRequest forneceu um método para lidar com uploads de arquivo, mas esses uploads precisam ser feitos no servlet. O STRUTS2 fornece um pacote mais simples.
O STRUTS2 usa a estrutura de upload de arquivos comuns do Jacarta-FileUpload por padrão. Portanto, usando a função de upload de arquivos do STRUTS2, você precisa adicionar dois pacotes JAR, ou seja, Commons-2.2.jar e Commons-FileUpload-1.3.1.jar.
Exemplo de upload de arquivos simples do STRUTS2:
1. Página de upload de arquivo
Para fazer upload de arquivos, o método do formulário deve ser definido para postar e o ENCTYPE está definido como Multipart/Form-Data. Depois que o Enctype estiver definido como multipart/formulário, o navegador usará fluxos binários para processar dados de formulário.
<%@ taglib prefix = "s" uri = "/struts-tags"%> <%-criado por Intellij Idea. Usuário: Data do Administrador: 2018/1/16 Hora: 14:06 para alterar este modelo Use o arquivo | Configurações | Modelos de arquivo. Label = "Selecione Arquivo"/> <S: submeter value = "upload"/> </s: form> </body> </html>
2. Processe a ação de solicitação de upload
/** * Descrição: Struts2 Enviamento de arquivo simples * Autor: Eleven * Data: 2018/1/24 10:39 */Public Classe FileAction estende o Actionsupport {// Fargo o arquivo Private File upload; // Carregar o tipo de arquivo Private String uploadContentType; // Carregar o nome do arquivo Private String uploadFilename; // Carregar o upload de arquivo ALMITOLYPES; String privada allowTypes é definida dinamicamente em struts.xml usando a tag param em struts.xml; public string Page () {return "Page"; } public void upload () {// upload: // 1. Leia o conteúdo do arquivo // 2. Escreva o conteúdo do arquivo no arquivo especificado, tente {system.out.println ("upload de arquivo permitido tipo ="+allowTypes); String realpath = servletActionContext.getServletContext (). GetRealPath ("/upload"); System.out.println ("Caminho absoluto do projeto ="+realpath); // Crie o arquivo Salvar Arquivo Novo arquivo (RealPath) .mkdir (); Arquivo de arquivo = novo arquivo (realpath+"/"+uploadFilename); // crie if (! File.exists ()) {file.createNewfile (); } FileOutputStream Out = new FileOutputStream (FILE); FileInputStream in = new FileInputStream (upload); byte [] buffer = novo byte [1024]; int len = 0; // Escreva enquanto lê e escreve 1kb cada vez, escreva 1kb while ((len = in.read (buffer))> 0) {out.write (buffer, 0, len); } System.out.println ("Enviamento de arquivo com sucesso ..."); } catch (Exceção e) {e.printStackTrace (); }} public arquivo getUpload () {return upload; } public void setupLoad (upload de arquivo) {this.upload = upload; } public string getUploadContentType () {return uPLOPLONTENTTYPE; } public void setupLoadContentType (String uPLOPLONTENTTYPE) {this.uploadContentType = uPLOPLONTENTTYPE; } public String getUploadFilEName () {return uPLOPLeFilename; } public void setupLoadFilename (String uPLOPLeName) {this.uploadfilename = uPLOPLFILENAME; } public string getLlowTypes () {return allowTypes; } public void SetAllTypes (String allowTypes) {this.allowTypes = allowTypes; }}Se o formulário contiver um campo de arquivo com o atributo de nome XXX, a ação correspondente precisará usar três variáveis de membro para encapsular as informações do campo de arquivo.
A variável de membro do XXX do tipo de tipo de tipo encapsula o conteúdo do arquivo correspondente ao campo do arquivo.
A variável XXXFILENAME MEMBRO DO TIPO STRING encapsula o nome do arquivo do arquivo correspondente ao campo do arquivo.
A variável XXXCONTENTTYPE MEMBRO DO TIPO STRING encapsula o tipo de arquivo do arquivo correspondente ao campo do arquivo.
3. Configure as suportes.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <constant name="struts.enable.DynamicMethodInvocation" value = "false"/> <constante name = "struts.devmode" value = "true"/> <names package = "padrão" namespace = "/" estends = "struts-default"> <!-file upload-> <ação name = "file_*" "{1}"> <nome da página = "/"/"/"/"FILE_*" "{1}"> <soult Name = "">/">/" propriedades. Aqui está um exemplo para definir o tipo que permite uploads de arquivos, mas o programa de ação não faz muito processamento -> <param name = "allowtypes"> image/png, imagem/gif, imagem/jpeg </amp> </ction> </catury> </stuts>Interceptor implementa a filtragem de arquivos
O STRUTS2 fornece um interceptador para upload de arquivo, FileUpload. Para que este interceptador trabalhe, a referência do interceptador deve ser configurada na ação.
Ao configurar um interceptador FileUpload, você pode especificar dois parâmetros para ele:
AllowTypes: o tipo de arquivo permitido ser carregado, separado por vários tipos de arquivos com vírgulas em inglês
Maximumsize: o tamanho do arquivo permitido ser carregado, em bytes.
Quando a filtragem de arquivos falha, o sistema é transferido automaticamente para a visualização lógica de entrada, para que a visualização lógica nomeada entrada deve ser configurada para esta ação. Além disso, a referência interceptora do DefaultStack deve ser configurada para esta ação, conforme exibido.
O arquivo de configuração Struts.xml é o seguinte:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <constant name="struts.enable.DynamicMethodInvocation" value = "false" /> <nome constante = "struts.devmode" value = "true" /> <names package = "default" namespace = " /" estends = "struts-default"> <!-upload de arquivo-> <ação name = "file_*" "{1}"> <!-configload configload = <interceptador-ref name = "FILEUPLOAD"> <!-Tipo de arquivo permitido-> <param name = "allowtypes"> image/png, imagem/gif, imagem/jpeg </param> <!-Tamanho do arquivo permitido-> <param name = "maximumsize"> 2000 </param> </intercetor-ref> <! name = "defaultStack"/> <!-Configure a página de exibição de entrada-> <resultado name = "input">/web-inf/jsp/input.jsp </resultado> <name de resultado = "Page">/web-inf/jsp/fileupload.jsp </resultado> </action> </package> </struts>O interceptador de upload de arquivo configurado acima exige que o tipo de upload do arquivo possa ser apenas um arquivo de imagem e o tamanho do arquivo não pode ser maior que 2000 bytes. Se o arquivo carregado for muito grande ou o tipo não corresponder, ele saltará para a visualização lógica de entrada.
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.