Existem dois tipos de downloads de arquivos da web. Uma é que o arquivo está no diretório do site. Você pode baixá -lo inserindo diretamente o caminho do arquivo no navegador, como http://www.xxx.com/file.zip. Outro tipo é que o arquivo não está no diretório do site ou o arquivo é gerado dinamicamente (exportar relatórios ou exportar excel etc.). Nesse caso, o download do arquivo precisa ser alcançado através do outputStream da resposta. O DownloadUtils é uma classe de ferramenta de download de arquivos da Web Java que fornece uma variedade de métodos estáticos para implementar o download do arquivo.
pacote com.rhui.util; importar java.io.bufferInputStream; importar java.io.bufferedOutputStream; importar java.io.file; importar java.io.fileInputStream; importar java.io.ioException; importar java.io.inputStream; importar java.io.OutputStream; importar java.net.urlencoder; importar javax.servlet.http.httpServletResponse; importar org.apache.commons.lang3.StringUtils; / *** Classe de download do arquivo*/ public class DownloadUtils {/ *** Download de arquivo Encoding* Esta codificação informa ao navegador o método de codificação do nome do arquivo para evitar o código ilegal ao baixar nomes de arquivos chineses*/ String estática privada coding = "utf-8"; / *** Download do arquivo* @param Resposta* @param filepath o caminho do arquivo no servidor, incluindo o nome do arquivo*/ public static void Download (httpServletResponse Response, string filepath) {arquivo file = novo arquivo (filepath.toString ()); download (resposta, arquivo, nulo, codificação); } /*** Download do arquivo* @param Resposta* @param filepath O caminho do arquivo no servidor, incluindo o nome do arquivo* @param filename O nome do arquivo baixado para o navegador. Se você não deseja o nome do arquivo baixado pelo navegador da mesma forma que o nome do arquivo no servidor, defina este parâmetro */ public static void Download (resposta httpServletResponse, string filepath, string filename) {arquivo file = new File (filePath.tostring ()); download (resposta, arquivo, nome do arquivo, codificação); } /*** Download do arquivo* @param Resposta* @param filepath O caminho do arquivo no servidor, incluindo o nome do arquivo* @param filename O nome do arquivo baixado para o navegador. Se você não deseja que o nome do arquivo seja baixado pelo navegador com o mesmo nome do arquivo no servidor, defina este parâmetro* @param que codifica o nome do arquivo que codifica*/ public static void Download (httpServletResponse Response, string filepath, string filename, string coding) {arquivo de arquivo = novo (file (filePath.tossTring (); download (resposta, arquivo, nome do arquivo, codificação); } /** * Download do arquivo * @Param Response * @Param File Arquivo * @param FileName O nome do arquivo baixado no navegador. Se você não deseja que o nome do arquivo seja baixado pelo navegador para o mesmo que o nome do arquivo no servidor, defina este parâmetro */ public static void Download (resposta httpSertletResponse, arquivo de arquivo) {download (resposta, arquivo, nulo, codificação); } /*** Download do arquivo* @Param Response* @Param File Arquivo* @param FileName O nome do arquivo baixado no navegador. Se você não deseja que o nome do arquivo seja baixado pelo navegador com o mesmo nome do arquivo no servidor, defina este parâmetro */ public static void Download (httpServletResponse resposta, arquivo de arquivo, string filename) {Download (resposta, arquivo, nome do arquivo, codificação); } /*** Download do arquivo* @Param Response* @Param File Arquivo* @param FileName O nome do arquivo baixado no navegador. Se você não deseja que o nome do arquivo seja baixado pelo navegador com o mesmo nome do arquivo no servidor, defina este parâmetro* @param que codifica o nome do arquivo que codifica*/ public static void Download (httpServletResponse Response, arquivo de string, string filename, string coding) {if (file == null ||! } // Se você não especificar o nome do arquivo para fazer o download no navegador, use o nome padrão do arquivo se (stringUtils.isblank (filename)) {filename = file.getName (); } tente {inputStream is = new FileInputStream (FILE); download (resposta, é, nome do arquivo, codificação); } catch (ioexception e) {e.printStackTrace (); }} / *** Download do arquivo* @param Resposta* @param é o stream de entrada do arquivo* @param fileName Nome do arquivo* @THOWSows ioexception* / public static void Download (httpServletResponse resposta, inputStream is, string filename) {download (resposta, é, arquivo de arquivo, encobrir); } / *** Download do arquivo* @param Resposta* @param é o stream de entrada do arquivo* @param fileName Nome do arquivo download* @param codificação de codificação formato* / public static void Download (httpSertLeSponse resposta, stringilutils; } BufferInputStream bis = null; OutputStream OS = NULL; BufferOutputStream bos = nulo; tente {bis = new bufferInputStream (IS); OS = Response.getOutputStream (); bos = new bufferoudOutputStream (OS); Response.setContentType ("Application/Octet-Stream; Charset =" + Encoding); Response.Setcharacterencoding (codificação); Response.setheader ("Content-Disposition", "Applement; filename ="+ urlencoder.encode (nome do arquivo, codificação)); byte [] buffer = novo byte [1024]; int len = bis.read (buffer); while (len! = -1) {Bos.Write (buffer, 0, len); len = bis.read (buffer); } bos.flush (); } catch (ioexception e) {e.printStackTrace (); } finalmente {if (bis! = null) {tente {bis.close (); } catch (ioexception e) {}} if (is! = null) {try {is.close (); } catch (ioexception e) {}}}} public static string getEncoding () {return coding; } public static void setEncoding (codificação de string) {downloadutils.encoding = coding; }}Se o arquivo for salvo em um diretório não local no servidor
String filepath = "c: //file.zip"; Downloadutils.Download (resposta, filepath);
Se o arquivo for um fluxo de entrada
// é o fluxo de entrada do arquivo // nome do arquivo é o nome do arquivo baixado pelo navegador // codificação é o nome do arquivo para evitar códigos ilegais quando houver chinês no arquivo string filename = "file.zip"; String coding = "utf-8"; Downloadutils.Download (resposta, é, nome do arquivo, codificação);
Baixar arquivos no servlet
pacote com.rhui.web.servlet; importar java.io.ioException; importar javax.servlet.servletexception; importar javax.servlet.annotation.webServlet; importar javax.servlet.http.httpServlet; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; importação com.rhui.util.downloadutils; @WebServlet ("/Download/servlet") Classe pública DownloadServlet estende httpServlet {private estático final serialversionuid = 1L; Serviço de void protegido (solicitação httpServletRequest, httpServletResponse Response) lança servletexception, ioexception {string filepath = "c: //file.zip"; Downloadutils.Download (resposta, filepath); }} PS: Download da imagem (incluindo função de link anti-roubo)
pacote cn.itcast.day06.web.servlet; importar java.io.ioException; importar java.io.inputStream; importar java.io.outputStream; importar java.net.urlencoder; importar javax.servlet.servletContext; importar javax.servlet.servletexception; importar javax.servlet.http.httpServlet; importar javax.servlet.http.httpSletRequest; import javox.sertlet.http.ttpstPSLEV; classe pública DownloadServlet estende httpServlet {public void Doget (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {// implementar a função anti-tet-tet-cadeia // Obtenha o cabeçalho do referente a explicar o que o visitante vem do string referente = solicitação.GETHERERAER ("" if (referente == null ||! referent.startswith ("http: // localhost")) {// é um link ladrão Response.sendRedirect ("Day06/index.jsp"); retornar ; } // Resolva o problema da resposta chinesa resposta distorcida. // Defina a codificação do corpo da mensagem // O cabeçalho da mensagem de resposta HTTP enviado através do protocolo HTTP não pode aparecer em chinês chineses, os chineses devem ser o nome de string codificado por URL = urlencoder.encode ("Beauty.jpg", "utf-8"); // notifique o navegador para ler o recurso Response.setheader ("Content-Disposition", "Applement; FileName ="+FileName); // Leia os dados da imagem e envie -os para o navegador do IE String webPath = "/download/beauty.jpg"; // equivalente ao caminho do aplicativo da web atual servletContext servletContext = super.getServletContext (); InputStream in = servletContext.GetResourCeasStream (WebPath); OutputStream out = Response.getOutputStream (); int len; byte [] buffer = novo byte [1024]; while ((len = in.read (buffer))! =-1) out.write (buffer, 0, len); } public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {doget (solicitação, resposta); }}