Baixar o arquivo
- 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.
- 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:
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();
}
}