代码示例:
package com.xiaomin.filedownload;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Demo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 设置输出的格式
*/
String fileName = "lyf.jpg".toString(); // 文件的默认保存名
response.reset();//清除首部的空白行
response.setContentType("bin");//是设置文件类型的,bin这个文件类型是不存在的,浏览器遇到不存在的文件类型就会出现一个下载提示。
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");//
/*
* 读取磁盘上的文件
*/
InputStream inStream = new FileInputStream("D:/lyf_result.jpg");// 文件的存放路径
// 循环取出流中的数据
byte[] b = new byte[100];
int len;
try {
while ((len = inStream.read(b)) > 0)
response.getOutputStream().write(b, 0, len);//向客户端响应
inStream.close();//关闭流
} catch (IOException e) {
e.printStackTrace();
}
}
}
Content-disposition 的说明如下:
Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。当 Internet Explorer 接收到头时,它会激活文件下载对话框,它的文件名框自动填充了头中指定的文件名。(请注意,这是设计导致的;无法使用此功能将文档保存到用户的计算机上,而不向用户询问保存位置。)
服务端向客户端游览器发送文件时,如果是浏览器支持的文件类型,一般会默认使用浏览器打开,比如txt、jpg等,会直接在浏览器中显示,如果需要提示用户保存,就要利用Content-Disposition进行一下处理,关键在于一定要加上attachment:
Response.AppendHeader(“Content-Disposition”,”attachment;filename=FileName.txt”);
备注:这样浏览器会提示保存还是打开,即使选择打开,也会使用相关联的程序比如记事本打开,而不是IE直接打开了。
截图留念:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/36051.html