O upload de arquivos Java e o download de arquivos são funções relativamente comuns no desenvolvimento do programa. O artigo a seguir apresentará a você três soluções para implementar o upload e o download de arquivos no Java. Os detalhes específicos são os seguintes;
O primeiro ponto: o código Java implementa o upload do arquivo
FORMFILE FILE = MANForm.getFile (); String newFilename = null; string newPathName = null; string fileaddre = "/numup"; try {inputStream stream = file.getInputStream (); // Leia o arquivo em string filepath = request.getRealpath (fileaddre); // busca o caminho da corrente do arquivo de sistema1 = novo (arquivo); file1) .mkdir (); newFilename = System.currenttimemillis ()+ file.getfilename (). substring (file.getfilename (). lastIndexof ('. newFilename); newPathName = filepath+"/"+newFileName; System.out.println (newPathName); // Crie um fluxo de saída para fazer upload de arquivos System.out.println (filepath+"/"+file.getFilename ()); IntTesread = 0; porte [] while ((bytesread = stream.read (buffer, 0, 8192))! = -1) {bos.write (buffer, 0, bytesread); // escreva o arquivo no servidor} bos.close (); stream.close ();} catch (filenotfoundException e) {e.prTrACHTRACE (); {E.PrintStackTrace ();}O segundo ponto: implementar o upload de arquivos na página JSP
pacote com.vOgoal.util; importar java.io.bufferedOutputStream; importar java.io.file; importar java.io.fileOutputStream; importar java.io.ioException; importação java.text.simpledateFormat; import.util.ArrayList; importar java.il.il; javax.servlet.servletInputStream; importar javax.servlet.http.httpServletRequest; public class JSPFileUpload {/** Objeto de solicitação*/private httpServletReQuest request = null;/** Path para o tamanho do arquivo*/private sobrevivente = NULL; NULL; = 1024*8;/** HASHTABLE que armazena parâmetros*/private hashtable paramht = new hasptable ();/** ArrayList que armazena o nome do arquivo do arquivo carregado*/Private ArrayList Updfilearr = newList ();/*** Defina o objeto. ** @param request* httpServletRequest Object*/public void setRequest (httpServletRequest Request) {this.request = request;}/*** Defina o caminho do upload de arquivo. * * @Param Path * O caminho de upload do arquivo especificado pelo usuário. */public void setupLoadPath (String Path) {this.uploadPath = Path;}/*** O programa principal para o processamento de upload de arquivos. ������b * * @return int resultado da operação 0 A operação do arquivo foi bem -sucedida; 1 Objeto de solicitação não existe. 2 O caminho de economia de arquivo não está definido ou o caminho de economia de arquivos está incorreto; 3* O ENCTYPE correto não está definido; 4 A operação do arquivo é anormal. */public int process () {int status = 0; // Antes de fazer o upload do arquivo, verifique o objeto de solicitação, faça o upload do caminho e o ENCTYPE. status = precheck (); // retorna o código de erro quando ocorre um erro. if (status! = 0) Retornar status; tente {// �� Parâmetro ou nome do arquivo �U�� Nome da tração = null; // Valor valuestring de parâmetro = null; // se o fluxo de leitura é o sinalizador de arquivo bit boolean fileflag = false; // arquivo a ser armazenado. Arquivo tmpfile = null; // o nome do arquivo carregado string fname = null; fileOutputStream baos = null; bufferoudoutputStream bos = null; // ��hashtableParamht = new Hashtable (); updFileArr = newrRaylist (); int rtnpos = 0; `` Get contentTypeSTring contentType = request.getContentType (); int index = contentType.indexof ("Boundary ="); String limite = "-" + contentType.substring (índice + 9); string endboundary = limite + "-" //// � Obtenha o fluxo da solicitação. ServletInputStream sis = request.getInputStream (); // Leia 1 linha while ((rtnpos = sis.readline (buffs, 0, buffs.length)! name.Trim (). Length ()> 0) {if (fileflag) {Bos.flush (); Baos.close (); Bos.close (); Baos = null; Bos = null; UpdFilearr.add (fname);} else {object obj = paramht.Ay (Name); MRAYLIST; {al = (Arraylist) obj;} al.add (value); system.out.println (value); paramht.put (name, al);}} name = new String (); value = new string (); fileflag = false; fname = new String); rtnPOS = rtNeRina; {strbuff = new String (buffs, 0, rtnpos); if (strbuff.tolowerCase (). startSwith ("content-Disposition: form-data;"))) {int nindex = strbuff.TolowerCase (). strbuff.substring (nindex + 6, nlastindex);} int findex = strBuff.tolowerCase (). indexOf ("fileName =/" "); if (findEx! = -1) {FileFlag = true; int flastIndex = strbuff.TolowerCase (). flastindex); fname = getFileName (fname); if (fname == null || fname.Trim (). Length () == 0) {fileFlag = false; sis.readline (buffs, 0, buffs.length); sis.readline (buffs, 0, buffs.length); sis.readLine (buffs, 0, buffs.length); continuação;} se {fname = getfilenameytime, 0, buffs.length); continua;} se {fname = getFilenameyTime, buffs.length); sis.readline (buffs, 0, buffs.length);}}} else if (strbuff.startswith (endboundary)) {if (name! null; updfilearr.add (fname);} else {object obj = paramht.get (nome); ArrayList al = new ArrayList (); if (obj! = null) {al =) (}} obj; && bos == null) {tmpfile = novo arquivo (uploadPath + fname); baos = new FileOutputStream (tmpfile); bos = new buffaredOutputStream (baos);} bos.write (buffs, 0, rtnpos); Baos.flush (); strBuff); value = value + strbuff;}}}} catch (ioexception e) {status = 4;} status de retorno;} private int precheck () {int errcode = 0; if (request == null) retornar 1; if (uploadpath == null || uploadPath.Trim (). Length () == 0) Retornar 2; else {arquivo tmpf = novo arquivo (uploadPath); if (! tmpf.exists ()) retornar 2;} string contentType = requeter.getContentType (); if (contentType.IndExof ("multipart/formatATA; nome) {string value = ""; if (name == null || name.trim (). length () == 0) retorna valor; value = (paramht.get (nome) == null)? "" :( string) ((ArrayList) paramht.get (nome). get (0); retorno; name.Trim (). Length () == 0) retorna nulo; if (paramht.get (nome) == null) retorna nulo; ArrayList al = (ArrayList) paramht.get (name); string [] Strarr = new String [al.size ()]; para (int i 1; i; i <l.size (); int getupdfilesize () {return updfilearr.size ();} public string [] getupdfilenames () {string [] starr = new string [updfilearr.size ()]; para (int i = 0; i <uppfilearr.size (); i ++); getFilename (string input) {int findEx = input.LastIndexof ("//"); if (findex == -1) {findex = input.LastIndexOf ("/"); if (findEx == -1) {retornar input; índice = input.Indexof ("."); Data dt = new Date (); SimpleDateFormat sdf = new SimpleDateFormat ("yyyyymmddhmmmssss"); retorna input.substring (0, index) + sdf.format (dt) + input.substring (ndin);2. Reference a classe Java na página JSP:
<%@página import = "com.vogoal.util.jspfileUpload"%> <%// Initialize jspfileUpload jfu = new jspfileUpload (); // Configurar o objeto de solicitação jfu.setRequest (request); // definir o arquivo de upload jfu.setUPLOTPATHPATHPATHPATHPATHPATHPATHPATHPATHPATHPATHPATHPATHPATHPATHPATHPATHPATPATHPATPATHPATPATHPATHPATHPATHPATHPATHPATHPATHPATHPATHPATHPATP (request); jfu.process (); // Obtenha os valores de outros parâmetros de controle de entrada no formulário String userName = jfu.getParameter ("nome de usuário"); // Se houver vários controles de entrada para o mesmo parâmetro, retornar a matriz string [] usernamearr = jfu.getParameters ("USERNAME"; jfu.getUpDFilENames (); // Obter o número de arquivos enviados, esse método é um pouco inútil int filenumber = jfu.getUpDFilesize (); // a seguir é a saída de código para o teste. // out.println ("Parâmetro:" + nome de usuário); // out.println ("Tamanho do parâmetro:" + usernamearr.length); // out.println ("theararr size:" + filearr.length); // if (filearr.length> 0) // out.println ("O terceiro ponto: o struts2 implementa o upload e o download do arquivo
Etapa 1: Adicione o Commons-FileUpload-1.2.1.Jar e o Commons-IO-1.3.2.Jar em Web-Inf/Lib. Esses dois arquivos podem ser baixados em http://commons.apache.org/.
Etapa 2: Defina o ENCTYPE da tabela de formulários como: "Multipart/Form-Data", como segue:
Código Java
classe pública UploadAction {private Arquivo UploadImage; //File private String uploadImageContentType;//File type private String uploadImageFileName;//File name private String bookname;//Book name private String author;//Author private String savePath;//File save location//Attribute getter/setter method public String upload() throws Exception{ //Implement upload code, I/O operation completes return "uploadSuccess"; }}Nota: O domínio do arquivo em um formulário corresponde a três propriedades na ação, a saber, nome do arquivo e tipo de arquivo. A nomeação é fixa. O nome do arquivo deve ser o mesmo que o nome do domínio do arquivo no formulário (uploadImage). O nome do arquivo é: arquivo + nome do arquivo e tipo de arquivo: arquivo + contentType.
Etapa 4: Configure nossa ação de upload em struts.xml.
Código Java
<action name = "upload"> <param name = "savepath">/uploadfile </param> <sirel> /success.jsp </resultado> </action>
NOTA: Para especificar o diretório Salvar o arquivo carregado no servidor, você precisa definir a variável SalvePath no UploadAction e adicionar os métodos correspondentes e getter, para que o STRUTS2 possa atribuir o valor /upload -arquivo ao atributo salvath, ou seja, para usar a variável SAVATH na upload, você deve defini -lo no uplroadAction.
Tipo de filtragem de arquivo de configuração manual
<param name = "allowtypes"> image/bmp, imagem/png, imagem/gif, imagem/jpeg </am>
Limite de tamanho de arquivo de configuração manual
<param name = "maximumsize"> 1048576 </param>
Use Interceptador de upload de arquivos do STRUTS2 para implementar a filtragem de arquivos
O STRUTS2 fornece um interceptador de upload de arquivo - FileUpload. Ao configurar esse interceptador, a filtragem de arquivos carregados pode ser facilmente alcançada.
Ao configurar um interceptador FileUpload, você pode especificar dois parâmetros para ele:
Types permitidos: Especifica o tipo de arquivo que pode ser carregado, separado por uma vírgula em inglês (,).
Maximumsize: Especifica o tamanho do arquivo permitido ser carregado em bytes.
Dica: Ao configurar um interceptador FileUpload, você pode implementar facilmente a filtragem de arquivos. Quando a filtragem do arquivo falhar, o sistema será transferido automaticamente para a visualização lógica de entrada. Portanto, a visualização lógica denominada entrada deve ser configurada para a ação. Além disso, a referência interceptora do DefaultStack deve ser configurada para a ação.
Use o interceptador do STRUTS2 para implementar a configuração da filtragem de arquivos da seguinte forma:
<action name="uploadFileAction"> <interceptor-ref name="defaultStack"> <!-- Configure the file type allowed to be uploaded, separated by multiple using ","--> <param name="fileUpload.allowedTypes"> image/bmp,image/png,image/gif,image/jpeg,image/jpg,image/x-png,image/pjpeg </param> <!-Configurar o tamanho do arquivo permitido ser carregado, unidade bytes, este exemplo é: 1MB-> <param name = "fileUpload.maximumsize"> 1048576 </amam> </interceptor-ref> <Nome do resultado = "Infort">/jsp/OneFileFileUPLOAD.JSP) name = "succcess">/jsp/resultado.jsp </resultado> </action>
Quando o usuário falha ao fazer upload, há uma certa mensagem rápida. No Struts2, use a tag <s: fielderror/> para produzir a mensagem de erro para a página.
NOTA: Se você deseja usar informações de prompt de erro do STRUTS2, a classe de ação que carrega o arquivo deve herdar o ACTIONSupport, caso contrário, o Struts2 não fornecerá a função de informação do prompt de erro de saída.
Podemos configurar arquivos de recursos (.Properties) para salvar a saída de informações para o usuário.
struts.messages.eror.file.too.large: Quando o tamanho do arquivo de upload excede o valor definido, o STRUTS2 produzirá as informações promntidas correspondentes à chave.
struts.messages.error.content.type.not.allowed: Quando o tipo de arquivo carregado não atende ao valor definido, o STRUTS2 produzirá as informações promissoras correspondentes à chave.
struts.messages.error.UplOading: Quando ocorre um erro desconhecido ao fazer o upload de um arquivo, o STRUTS2 produzirá as informações promissoras correspondentes à chave.
Também precisamos configurar o arquivo de recursos no arquivo struts.xml. Em seguida, temos que visualizar nosso arquivo de recursos. Já contém chinês. Temos que convertê -lo e configurá -lo no projeto.
Defina o arquivo de recursos em struts.xml:
<constante name = "struts.custom.i18n.resources" value = "mensagens"/> ou <nome constante = "struts.custom.i18n.resources" value = "message_zh_cn"/>
Use o comando nativo 2ascii d: /messages.properties d: /messages_zh_cn.properties para converter o arquivo de recursos originais em suportados.
NOTA: Manter internacional, o sufixo do nome do arquivo de recursos é: *_ZH_CN + Extensão do arquivo.
O princípio de fazer upload de vários arquivos é o mesmo que acima, mas deve -se notar que os nomes de atributos de vários campos de arquivos devem ser os mesmos e em ação, arquivo [] ou list <File> deve ser usado para recebê -lo.
Pessoalmente, acho que usar esse método para fazer upload de vários arquivos não é
muito bom.
Struts2 para download de arquivo
O STRUTS2 fornece um tipo de resultado do fluxo, usado especificamente para suportar o download de arquivos. Ao especificar o tipo de resultado do fluxo, um parâmetro de nome de entrada precisa ser configurado, que especifica um fluxo de entrada, que é a entrada do arquivo baixado (ou seja, o arquivo pode ser baixado em um fluxo nessa entrada).
Implementar a ação do download de arquivo
classe pública fileDownLoadAction implementa ação {// Este valor da propriedade é especificado no arquivo de configuração. O STRUTS2 injetará automaticamente (ou seja, atribuir um valor). Você precisa fornecer os métodos Setter e Getter Private String inputPath; // Especifique o caminho completo do arquivo a ser baixado (nome do caminho + nome do arquivo)/ * * A classe de ação que implementa o download deve fornecer um método para retornar uma instância do InputStream. O valor da propriedade de nome de entrada correspondente em <resultado ... // public inputStream getTargetFile () lança a exceção {return servletActionContext.getServletContext (). GetResourceasStream (inputPath); } // O método Execute que lida com solicitações de usuário, que retorna a string de sucesso public string Execute () lança a exceção {return "succcess"; }}A configuração de ação correspondente no arquivo struts.xml
<ação name = "Download"> <!-Especifique a localização do recurso baixado-> <param name = "inputpath">/uploadFile/Demo.txt </am Param> <!-Configure o tipo de resultado como stream-> <nome do nome = "SUCK" TYPE = "Stream"> <! Arquivo-> <param name = "inputName"> TargetFile </param> <!-Especifique o método de download do arquivo baixado e o nome do arquivo salvo no momento do download. O nome do arquivo ao salvar o arquivo deve ter uma extensão, e a extensão indica o ícone do tipo de download-> <param name = "contentDisposition"> anexamento; nome do arquivo = struts2.txt </param> <!-Especifique o tamanho do buffer do arquivo baixado-> <param name = "buffersize"> 4096 </param> </resultado> </resultado>
O exposto acima são as três soluções para implementar o upload e o download de arquivos em Java apresentado a você pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!