ファイルのダウンロード
- ラベルを直接使用するには、ダウンロードを行ったり来たり
コンテンツの中には、自動的にこのメソッドを使用しない、ファイルを解析しませんブラウザがダウンロードされ、ブラウザを解析します。
- リクエスト送信で来るとダウンロードサーブレット
ストリームの形式で、ファイルの絶対アドレスを取得するために、ファイル名パラメータを受け、サーバに送信した後に来て、ブラウザに書き込まれ、サーバにファイル名を送信するためのサーブレットリクエストを送信しています。
私は、ファイルの種類には、ブラウザがMIMEタイプの種類を識別することが何であるかを伝える必要がありました。
this.getServletContext().getMimeType(“文件名称”);
セットレスポンスヘッダタイプ(MIME)
response.setContentType("MIME类型")
//即
response.setContentType(this.getServletContext().getMimeType(“文件名称”));
添付ファイルのフォームが開かれたではなく、解決するには、ブラウザを伝えるために、レスポンスヘッダを設定します
response.setHeader("Content-Dsiposition","attachment;filename="+文件名)
ステップ
ファイル名の引数を受け取る1.
MIMEタイプを取得2.
3.設定されたブラウザの応答タイプに
添付ファイルをダウンロードする4.ブラウザを
ファイルの絶対パスの取得5.
6.読むファイルストリームを
出力ストリームに入手7.
8.内容を出力ストリームに書き込みます
ファイルのパス:
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();
}
}