A primeira é a parte da página da web, upload_file.jsp
<%@ Page Language = "Java" Image = "Java.util.*" PageEncoding = "UTF-8"%> <! > <Form Action = "UPLOPFILE" Método = "Post" ENCTYPE = "Multipart /Form-Data"> <!-Domain de arquivo-> <input type = "arquivo" name = "origem" /< /> input type = " Envie "value =" upload "> </mand> </body> </html>
Para a forma de fazer upload do arquivo, o METHO deve ser definido para postar e o ENCTYPE deve ser definido como multipart/formulário.
A partir do código acima, você pode ver que este formulário é enviado ao upload arquivo desta ação para processá -lo.
<ação name = "uploadfile"> <resultado name = "success">/uploadResult.jsp </resultado> <!-FileUploading, que pode ser usado para limitar o tipo e o tamanho do documento dos documentos de upload-> <Internetor- Ref. = "FILEUPLOAD"> <!-Limite o tamanho do arquivo 20m, a unidade é byte-> <sem nome = "maximumsize"> 20971520 </param> </interceptor-ref> <!-O interceptor padrão deve ser declarado Após o FileUpload Interceptor-> <Interceptor-Ref Name = "DefaultStack" /> </ction>
O FileUpload Interceptor é usado para configurar os caminhos de upload para limitar os tipos e o tamanho do arquivo.
Em relação ao tamanho do arquivo, não é possível ter
<constante name = "struts.multipart.maxsize" value = "21000000"/>/>
Essa linha de código indica o tamanho máximo do tamanho do arquivo permitido para fazer o upload dos arquivos em todo o projeto, ou seja, qualquer tamanho de arquivo único carregado neste projeto não pode exceder 21000000 bytes (cerca de 20m). O arquivo que pode ser carregado por padrão é 2M, portanto, esse também é um método que quebra as restrições de arquivos 2M que podem fazer upload apenas de arquivos 2M.
Em relação ao tipo de arquivo, se você precisar limitá -lo como um arquivo de imagem, pode configurá -lo assim
<!-Configure apenas o upload do arquivo de imagem-> <intercepter-ref name = "fileUpload"> <posm name = "allowtypes"> image/bmp, imagem/x-png, imagem/gif, imagem/jpeg < /< /Param> < /intercepter-ref> <interceptor-ref name = "defaultStack" /> />
O valor no rótulo é que o valor do arquivo é o tipo MIME, e o tipo MIME do arquivo comum pode ser encontrado em%tomcat_home%/conf/web.xml.
Se você quiser se limitar ao arquivo de palavras, pode <serecder> configurado assim
<!-Soltar apenas permite fazer upload do documento do Word-> <intercepter-ref name = "fileUpload"> <sem nome = "alloodtypes"> Application/msword, Application/vnd.openxmlformats -Offics Edocument.wordProcessingMl.document /intercepter-ref> <interceptor-ref name = "defaultStack" />
No entanto, me sinto assim para limitar o tipo de arquivo, é melhor usar o JavaScript para implementar restrições no front end.
Em seguida, gravar uploadAction, os atributos privados necessários necessários para o uploads são a fonte, o que é consistente com o atributo de nome do domínio do arquivo em upload_file.js p, ou seja, o valor do nome da propriedade do domínio do arquivo é fonte, depois deve haver nossa , além disso, existem mais dois atributos privados importantes:
Private String sourcefilename;
Private String SourCeContentType;
Em resumo, isto é, por exemplo, o nome = "ABC" do domínio de campo chinês em upload_file.jsp, então isso precisa ser definido na ação
Arquivo privado ABC;
O ABC obterá automaticamente o objeto de arquivo a ser carregado, o ABCFileName obtém automaticamente o nome do arquivo e o ABCContetType obtém automaticamente o tipo de arquivo.
Eu tenho que me concentrar no upload de caminhos.
Se for enviado para o caminho absoluto, é muito bom, mas se você deseja fazer o upload para a pasta de upload no diretório raiz do projeto, como obter o caminho completo desta pasta de upload?
Eu tentei usar
ServletActionContext.getServletContext ().
Mas retornou nulo. Também usado
ServletActionContext.getRequest ().
Ainda voltou a nulo. Mas, verificando esse problema on -line, muitas pessoas recomendam este artigo, provando que pode ser viável em alguns casos, mas há pessoas que retornam ao NULL como eu. Interface ServiceContextare. O método específico é o seguinte:
Classe pública UploadAction estende o ACTIONSUPPORT IMVLETCONTEXTE { / ** * omitindo outro código ... * / PRIVENTEVELTO CONTECTO DE PRIVENTE; Void SetServletContext (Contexto ServletContext) {this.Context = Context;}}
Então use
String Path = context.getRealPath ("/upload");
Obtenha o caminho da pasta de upload. Em seguida, execute o upload:
/*Carregue o arquivo para a pasta de upload*/arquivo salvador = novo arquivo (caminho, sourcefilename);
Pessoalmente, recomendo esse método, porque esse método parece evitar o caminho correto quando o projeto é embalado e transferido para outros ambientes.
Cole o código completo de uploadAction no uploadaction.java
pacote com.lidi.action; Classe Upload Extende Ações do IMVLETCONTEXTO { / ** * / private estático INL ServiceVersionuid = 1L; Tipo do tipo de arquivo do tipo de arquivo privado Contexto; / Public arquivo getSource () {return source;} public void Setsource (fonte de arquivo) {this.source = fonte; String getSourceContentType () {return sourceContentType;} public voidth e (String sourceContentType) {this.sourceContentType = sourceContentType;} @Override public Void setSevletContext (ServicetContext) {} this. *Obtenha o caminho para o arquivo de upload: Projeto ROOT DIRETORY PASTER*/String Path; pasta* / arquivo savefile = NOVO FILE (PATH, SOURCEFILENGEM);
Upload Resultados Página UploadResult.jsp
<%@ Page Language = "Java" Image = "Java.util. Doctype html> <html> <head> <title> RESULTADO DE ALGULAR </TITTITE </Chefe> <body> <p> Nome do arquivo: <s: property value = "sourcefileName"/> </p> <p> arquivo Tipo: <S: Propriedade Valor = "SourCeContentType" /> </p> <p> arquivo: <a href = "upload /<s: property value =" sourcefilename " /"> <s: property = "fontefi lename" /> </a> </p> </body> </html>
O acima é todo o conteúdo deste artigo. Espero que todos possam gostar.