Upload de arquivo
multipart/form-data<input type=“file”> precisa ser adicionado.<s: formulário action = "testUpload" ENCTYPE = "Multipart/form-dados"> <s: textfield name = "nome de usuário [0]" Label = "user-1"> </s: textfield> <s: name de arquivo = "Photos" Label = "Photos"> </s: file> <s: textfield name = "username [1]" "1-1-2" = "Photos"> </s: file> <s: textfield = "userrMame [1]" "1-1-2" "=" = "Photos">: Label = "Fotos"> </s: arquivo> <s: textfield name = "username [2]" etc. "user-3"> </s: textfield> <s: name file = "photos" etc.
classe pública UploadAction estende o Actionsupport { @setter @getter List Private List <File> Fotos; @Setter@Getter Private List <String> PhotoContentType; @Setter@Getter Private List <String> PhotosFilename; @Setter@Getter Private List <String> Nome de usuário; public string testUpload () lança IoException {System.out.println ("Nome de usuário:"+nome de usuário); System.out.println ("fotos:"+fotos); System.out.println ("PhotosFilename:"+PhotosFilename); System.out.println ("PhotoContentType:"+PhotoContentType); // Passa o arquivo para o arquivo de upload no diretório raiz do servidor // obtenha servletContext servletContext servletContext = servletActionContext.getServletContext (); // obtenha o caminho real string realpath = servletContext.getRealPath ("/upload"); System.out.println (RealPath); FILE UPLOPLEFILE = novo arquivo (RealPath); // julga se o caminho existe if (! Uploadfile.exists ()) {// crie uploadfile.mkdir (); } para (int i = 0; i <photos.size (); i ++) {uuid uuid = uuid.randomuuid (); Fileutils.copyfile (photos.get (i), novo arquivo (realpath + "/" + uuid + photosFilename.get (i))); } retornar sucesso; }}1. Quantos pequenos problemas devem ser tratados?
1. O nome do arquivo tem um nome duplicado. Geralmente, um UUID pode ser gerado antes do nome do arquivo como um prefixo.
2. Limite o tamanho de um único arquivo
3. Tipos de arquivo restringidos
4. Limite o tamanho total do arquivo
2. O interceptador FileUpload é fornecido no STRUTS2 para definir esses valores de atributo.
O FileUpload Interceptor possui 3 propriedades que podem ser definidas.
NOTA: Há um limite no tamanho total dos arquivos carregados em default.properties em org.apache.struts2. Você pode usar constantes para modificar esse limite struts.multipart.maxSize = 2097152
<constante name = "struts.devmode" value = "true"/> <!-altere o tamanho do arquivo total aqui-> <nome constante = "struts.multipart.maxsize" value = "2097152"/> <name "package =" default "namesace ="/"estends =" struts-Default "> <interceptador-ref name = "defaultStack"> <!-Alterar o tamanho de um único arquivo, o componente FileUpload do Commons aceita arquivos carregados por padrão é 2m-> <param name = "fileUpload.maximumsize"> 57,408 </param> <!-Tipo de arquivo permitido para up do upload-> name = "fileUpload.allowedTypes"> image/pjpeg, imagem/gif </am Param> <!-Extensões para fazer upload de arquivos-> <param name = "fileUpload.allowedextensões"> jpg, gif </param> </interceptor-ref> </interceptor-Tack> </interceptors> </interceptors> </interceptores> name = "myInterceptor"> </padrão-interceptor-ref> <ação name = "testUpload" method = "testUpload"> <resultado name = "success">/web-inf/views/success.jsp </resultado> <name "input">/upload.jsp </resultado> </action> </package>
1. Mensagens de erro relacionadas ao upload de arquivos?
1. As mensagens de erro relacionadas ao upload de arquivo são predefinidas no arquivo struts-messages.properties.
2. Você pode fazer upload do arquivo de recurso correspondente à ação no arquivo ou redefinir a mensagem de erro no i18n_zh_cn.properties International Resource File
struts.messages.error.file.too.large = O arquivo que você passa é muito grande.
Download do arquivo
Em alguns aplicativos, pode ser necessário enviar um arquivo para o navegador do usuário dinamicamente, e o nome e o local de armazenamento do arquivo são imprevisíveis ao programar
Código de amostra
<a href = "testwnload"> download </a>
classe pública DownloadLoadAction Extends ActionSupport {// Normalmente, os seguintes parâmetros serão fornecidos no Action @setter @getter Private String contentType; @Setter@getter private longo contentLength; @Setter@getter Private String ContentDisposition; @Setter@getter private inputStream inputStream; public String testDownload () lança fileNotfoundException, não suportadoEncodingException {// Get ServletContext ServletContext servletContext = servletActionContext.getServletContext (); // obtenha o caminho do arquivo string realpath = servletContext.getRealPath ("/web-inf/file/pelo menos você.mp3"); // Obtenha o fluxo do arquivo inputStream = new FileInputStream (RealPath); // defina o tipo de arquivo contentType = servletContext.getMimetype (realpath); // obtenha o comprimento do arquivo contentLength = new arquivo (realpath) .Length (); // defina o nome do arquivo string filename = "pelo menos você.mp3"; FILENAME = new String (FILENAME.GETBYTES ("GBK"), "ISO8859-1"); ContentDisposition = "Anexamento; FileName ="+FileName; sucesso de sucesso; }}<!-Download do arquivo-> <ação name = "testwnload" method = "testdownload"> <resultado tipo = "stream"> <!-tamanho do buffer de arquivo-> <param name = "buffersize"> 2048 </aman> </resultado> </action>
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.