Prefácio
Ao desenvolver aplicativos da Web, devemos fornecer aos usuários funções de upload, como o upload de uma imagem como um avatar. Para fazer upload de arquivos, devemos definir o método do formulário para postar e o ENCTYPE para multipart/form-data . Somente neste caso o navegador enviará os dados binários do arquivo selecionado do usuário para o servidor. Este artigo fornecerá um resumo detalhado da função de upload na estrutura STRUTS2. Não vou dizer muito abaixo, vamos dar uma olhada na introdução detalhada juntos.
Upload de arquivo struts2
O STRUTS2 não fornece seu próprio analisador de solicitação, ou seja, o STRUTS2 não lidará com solicitações multipart/de dados por si só. Ele precisa chamar outras estruturas de upload para analisar dados de solicitação binária, mas o STRUTS2 encapsula ainda mais o analisador de upload original, simplificando ainda mais o upload do arquivo.
No arquivo de configuração do default.properties .
Analisador ### para lidar com solicitações de postagens HTTP, codificadas usando o multipart/form-data do tipo MIME# struts.multipart.parser = cos# struts.multipart.parserser = Pell# struts.multipart.parser = Jakarta-streamstruts.multipart.multipart.parser = jakarta-streamstuts.multipart.mulserser = Jakarta-streamstuts.miT. por defaultTruts.multipart.Savedir = struts.multipart.maxsize = 2097152
O código acima é usado principalmente para configurar o analisador de upload ao fazer o upload de arquivos no STRUTS2. O encapsulamento de Struts2 isola a diferença entre os componentes de upload de arquivo subjacentes. Desde que o resolvedor seja usado para fazer upload deste arquivo de configuração, os desenvolvedores podem alternar facilmente entre diferentes estruturas de upload de arquivos.
O STRUTS2 usa o analisador de upload do Jacarta por padrão, é claro, se você não gosta, também pode mudar para outra coisa. A seguir, é apresentada uma função de upload de arquivo simples com base no Struts2 através do código.
Implementar a ação do upload de arquivo
Página da recepção:
<Form Action = "Upload" Method = "Post" ENCTYPE = "Multipart/Form-Data"> Title: <input type = "text" name = "title"> <br> arquivo: <input type = "file" name = "upload"> <br> <brut Type = "submit" Value = "submit"> </formulário "> <br> <br>
Classe de ação:
classe pública UploadAction estende o Actionsupport {private string title; upload de arquivo privado; Private String uploadContentType; private string uploadfilename; private string savepath; public void setSavePath (valor da string) {this.savePath = value; } private string getSavePath () {string realpath = servLetActionContext.getServletContext (). getRealPath ("/web-inf/" + salvath); devolver o Realpath; } public void Settitle (String Value) {this.title = value; } public string gettitle () {return título; } public void setupLoad (valor do arquivo) {this.uppload = value; } public file getUpload () {return upload; } public void setupLoadContentType (String value) {this.upLoadContentType = value; } public String getFileContentType () {return uPLOPLONTENTTYPE; } public void setupLoadFilename (String value) {this.uploadfilename = value; } public String getUploadFilEName () {return uPLOPLeFilename; } @Override public String Execute () lança Exceção {FileOutputStream fos = new FileOutputStream (getSavePath () + "//" + getupLoadFilename ()); FileInputStream fis = new FileInputStream (getUpload ()); byte [] buffer = novo byte [1024]; int len = 0; while ((len = fis.read (buffer))> 0) {fos.write (buffer, 0, len); } fis.close (); fos.close (); sucesso de sucesso; }}Arquivo de configuração do Struts.xml:
<pacote name = "upload" estends = "struts-default"> <ação name = "upload"> <param name = "savepath">/upload </param> <resultado name = "succcess">/success.jsp </resultado> <resultado name = "input">/index.jsp </resultado> </action> </cation>
Para aula de ação, duas propriedades especiais estão incluídas:
Esses dois atributos são usados para encapsular o nome do arquivo do arquivo carregado e o tipo de arquivo do arquivo carregado. Para o Struts2, se o formulário contiver um campo de arquivo com o atributo de nome XXX, a ação correspondente precisará usar três atributos para encapsular as informações do campo do arquivo:
Através do processo de desenvolvimento acima, podemos ver que é realmente uma coisa simples fazer upload de arquivos através do Struts2. O que precisamos fazer é associar o domínio do arquivo a uma propriedade do tipo de arquivo em ação, para que possamos acessar facilmente o conteúdo do arquivo do arquivo carregado. Quanto à forma como o Struts2 usa o analisador multipartidário, é completamente transparente para os desenvolvedores.
Implementar manualmente a filtragem de arquivos
Muitas vezes, os aplicativos da Web não permitem que os usuários enviem livremente. Precisamos limitar o tipo de arquivo e o tamanho do arquivo carregado pelos usuários, para que a filtragem de arquivos seja executada durante o upload do arquivo. Agora, implementaremos manualmente o upload de filtragem de arquivos.
Configure um novo parâmetro em struts.xml para indicar o tipo de upload suportado:
<param name = "allowtypes"> image/png, imagem/gif, imagem/jpeg </am Param>
Adicione uma função de validação em ação:
// Verifique @OverridePublic void validate () {String filterResult = filterType (getoulTypes (). Split (",", "); if (filterResult! = null) {addfielderror ("upload", "o tipo de arquivo que você deseja fazer upload está incorreto!"); }} public string filterType (string [] tipos) {string filetype = getFileContentType (); para (tipo de string: tipos) {if (type.equals (fileType)) {return null; }} retornar erro;} Isso apenas implementa o julgamento do tipo e, em seguida, implementa a verificação de tamanho com base length() da classe de arquivo. Mas é tão problemático, vamos falar sobre uma afirmação mais simples.
Interceptor implementa a filtragem de arquivos
O STRUTS2 fornece um interceptador para upload de arquivo, e a filtragem de arquivos pode ser alcançada mais facilmente configurando um interceptador. FileUpload de upload de arquivo no Struts2. Para que o interceptador funcione, você só precisa configurar a referência do interceptador na ação.
Ao configurar um interceptador FileUpload, você pode especificar dois parâmetros para ele:
<!-Configure o arquivo interceptador FileUpload-> <interceptor-ref name = "FILEUPLOAD"> <param name = "allowtypes"> image/png, image/gif, imagem/jpeg </param> <param name = "maximumsize"> 20000000 </param> <CeptreRref> <!-Config. name = "defaultStack"/> <resultado name = "succcess">/success.jsp </resultado>
Dessa forma, a modificação da configuração pode ser feita, o que é realmente muito mais fácil do que escrever um pedaço de código.
Mensagem de erro de configuração
Para erros de upload, o sistema solicitará mensagens de erro em inglês por padrão. No entanto, para produzir mensagens rápidas internacionais, é necessário adicionar as duas definições de mensagens seguintes ao arquivo de configuração de recursos internacionais:
struts.messages.error.content.type.not.allowed = O tipo de arquivo de upload está incorreto, envie novamente novamentestruts.messages.error.file.too.large = O arquivo que você carregou é muito grande, envie -o novamenteEm seguida, você pode usar <s: fielderror/> para emitir a mensagem de erro.
Configuração constante para upload de arquivo
No início do artigo, conversamos sobre a configuração no default.properties , que possui uma configuração struts.multipart.saveDir . Então, qual é a função específica deste item de configuração?
Durante o processo de upload do arquivo STRUTS2, uma pasta temporária precisa ser especificada para armazenar arquivos temporários gerados durante o processo de upload; Se nenhuma pasta temporária for especificada, o sistema padronizará o uso de javax.servlet.context.tempdir , sob o trabalho/catalina/localhost/caminho no caminho da instalação do Tomcat. E isso struts.multipart.Savedir configura o local de armazenamento de arquivos temporários. Portanto, durante o processo de desenvolvimento, você deve prestar atenção se o diretório leu e grava permissões.
Há também um struts.multipart.maxSize configuração, que representa o tamanho do arquivo carregado. Se a propriedade Maximumsize desta configuração e a propriedade Maximumsize do Interceptor FileUpload forem especificadas ao mesmo tempo, ele se comparará primeiro com a propriedade Maximumsize struts.multipart.maxSize Configuration e depois comparará com a propriedade Maximumize do FileUplOAD Interceptor. Se o tamanho do arquivo exceder a configuração Maximumsize do struts.multipart.maxSize , uma exceção aparecerá e o resultado não será transferido para a entrada. Certifique -se de prestar atenção nisso.
Resumir
Este artigo resume o upload de arquivos no STRUTS2 em detalhes. Existem muitos conteúdos, basicamente todo o conteúdo do manual. Bem, basta usá -lo como um manual.
Ok, o acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.