package cn.ITHong.Servlet;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//读取源文件:文件的下载
public class ServletDemo6 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
test2(response);
}
/**
*中文文件名下载*/
private void test2(HttpServletResponse response)
throws FileNotFoundException, IOException {
//得到要下载的文件
ServletContext sc = getServletContext();
//得到真实路径,路径必须以"/"开头,"/"就代表着当前应用
String path = sc.getRealPath("/中文名字.jpeg");
//文件路径截取
String fileName = path.substring(path.lastIndexOf("\\")+1);
//构建输入流
InputStream in = new FileInputStream(path);
//通知客户端以下载的方式打开(第二个参数中attachment;filename)
//response.setHeader("Content-Disposition", "attachment;filename ="+fileName);
//中文文件名在此处要进行URL编码,不然能下载文件,却不能再下载的时候显示文件名
response.setHeader("Content-Disposition", "attachment;filename ="+URLEncoder.encode(fileName, "UTF-8"));
response.setHeader("Content-Type", "application/octet-stream");
//response.getOutStream()得到输出流
OutputStream out = response.getOutputStream();
int len = -1;
byte[] b = new byte[1024];
while((len = in.read(b))!=-1)
{
out.write(b,0,len);
}
in.close();
out.close();
}
/**
* 最简单的文件下载函数*/
private void test1(HttpServletResponse response)
throws FileNotFoundException, IOException {
//得到要下载的文件
ServletContext sc = getServletContext();
//得到真实路径,路径必须以"/"开头,"/"就代表着当前应用
String path = sc.getRealPath("/20130120183348_dmUaY.thumb.600_0.jpeg");
System.out.println(path);
//构建输入流
InputStream in = new FileInputStream(path);
//通知客户端以下载的方式打开(第二个参数中attachment;filename)
response.setHeader("Content-Disposition", "attachment;filename = 20130120183348_dmUaY.thumb.600_0.jpeg");
response.setHeader("Content-Type", "application/octet-stream");
//response.getOutStream()得到输出流
OutputStream out = response.getOutputStream();
int len = -1;
byte[] b = new byte[1024];
while((len = in.read(b))!=-1)
{
out.write(b,0,len);
}
in.close();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
下载文件(中英文路径)
最新推荐文章于 2021-12-06 14:18:25 发布