JavaWeb- arquivo de download (para resolver o problema do lixo)

Baixar o arquivo

  1. uso direto de um rótulo de ir e vir de download

Parte do conteúdo irá analisar automaticamente o navegador, o navegador não irá analisar o arquivo é baixado, não use este método.

  1. Servlet vir e de download enviando uma solicitação
    através do envio de um pedido Servlet para enviar o nome do arquivo para o servidor, após o envio para o servidor, recebendo o parâmetro de nome de arquivo para obter o endereço absoluto do arquivo, na forma de fluxos de vir e escritas para o navegador.
    Eu tive que dizer que tipo de arquivo, o navegador é identificar o tipo de tipos MIME.
this.getServletContext().getMimeType(“文件名称”);

tipo de conjunto de cabeçalho de resposta (MIME)

response.setContentType("MIME类型")
//即
response.setContentType(this.getServletContext().getMimeType(“文件名称”));

Configurando cabeçalhos de resposta, para dizer o navegador não para resolver, na forma de um anexo é aberto

response.setHeader("Content-Dsiposition","attachment;filename="+文件名)

Passo
1. Receber um argumento nome do arquivo
2. Obter o tipo mime
3. Defina o tipo de resposta navegador
4. navegador para baixar um anexo
5. Obtenha o arquivo caminho absoluto
6. Leia o fluxo de arquivo
7. obter um fluxo de saída
8. conteúdo escrito no fluxo de saída

Caminho do arquivo:
Aqui Insert Picture Descrição
JSP:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<a href="/Servlet6?filename=1.jpg">1.jpg</a><br/>
<a href="/Servlet6?filename=a.txt">a.txt下载</a>
</body>
</html>

@WebServlet("/Servlet6")
public class Servlet6 extends HttpServlet {
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收文件名参数
        String filename = request.getParameter("filename");
        /* 对接收的参数进行编码处理
        * 获取参数,默认会对参数进行编码ISO8859-1
        * 把乱码转成二进制位*/
        byte[] bytes = filename.getBytes("ISO8859-1");
        /*使用UTF-8进行编码*/
        filename = new String(bytes,"UTF-8");
        /*根据文件名来获取mime类型*/
        String mime = this.getServletContext().getMimeType(filename);
        /*设置mimeType*/
        response.setContentType(mime);
        /*告诉浏览器中文编码*/
        // 获取客户端信息
        String agent = request.getHeader("User-Agent");
        // 定义一个变量记录编码之后的名字
        String filenameEncoder = "";
        if (agent.contains("MSIE")) {
            // IE编码
            filenameEncoder = URLEncoder.encode(filename, "utf-8");
            filenameEncoder = filenameEncoder.replace("+", " ");
        } else if (agent.contains("Firefox")) {
            // 火狐编码
            BASE64Encoder base64Encoder = new BASE64Encoder();
            filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
        } else {
            // 浏览器编码
            filenameEncoder = URLEncoder.encode(filename, "utf-8");
        }
        response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder);
        //获取文件的绝对路径
        String path = this.getServletContext().getRealPath("img/"+filename);
        System.out.println(path);
        //3.读取文件流
        FileInputStream in = new FileInputStream(path);
        //4.获取输出流
        ServletOutputStream out = response.getOutputStream();
        //5.把内容写出到输出流
        byte[] buffer = new byte[1024];
        int len = 0;
        while((len = in.read(buffer)) != -1) {
            out.write(buffer, 0, len);
        }
        in.close();
    }


}
Publicado 25 artigos originais · ganhou elogios 0 · Visualizações 278

Acho que você gosta

Origin blog.csdn.net/qq_42219004/article/details/105300050
Recomendado
Clasificación