文件名是英文的:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path = this.getServletContext().getRealPath("/download/1.jpg");
String filename = path.substring(path.lastIndexOf("\\") + 1);
response.setHeader("content-disposition", "attachment;filename=" + filename);
InputStream in = null;
ServletOutputStream out = null;
try{
in = new FileInputStream(path);
int len = 0;
byte buffer[] = new byte[1024];
out = response.getOutputStream();
while((len = in.read(buffer)) > 0){
out.write(buffer, 0, len);
}
}finally{
if(in != null){
try{
in.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(out != null){
try{
out.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
文件名含有中文,可用代码:
private void test2(HttpServletResponse response)
throws FileNotFoundException, IOException {
String path = this.getServletContext().getRealPath("/download/黑客.jpg");
String filename = path.substring(path.lastIndexOf("\\") + 1);
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename,"UTF-8"));
InputStream in = null;
ServletOutputStream out = null;
try{
in = new FileInputStream(path);
int len = 0;
byte buffer[] = new byte[1024];
out = response.getOutputStream();
while((len = in.read(buffer)) > 0){
out.write(buffer, 0, len);
}
}finally{
if(in != null){
try{
in.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(out != null){
try{
out.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}