jsp servlet通知客户端下载文件

有时,我们需要的是当客户端点击按钮后,自动下载文件,最简单的方法莫过于利用a标签写上文件的路径,直接下载,但有的时候我们可能会有一些复杂操作,因此需要在类似于servlet中进行处理,通知客户端下载,所用代码如下:

假设你有一个名为"download"的servlet,页面上的跳转我用的不是ajax(因为网上给出的解释是:ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。而文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,并不能执行。),代码为:

window.location.href='download';

该servlet中的doGet()或者doPost方法的最后加上(这是必须要有的):

String fileName = "文件名"+".后缀名";
response.setContentType("APPLICATION/OCTET-STREAM");
//设置文件名
response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(fileName,"UTF-8"));

接下来是关于文件内容的设置(二选一,添加在上面那段代码的后面),如果文件的内容是你在后台生成的String或者byte[]或者StringBuffer,可以用以下代码设置(利用StringBuffer的好处在于如果你的文件内容是由多部分凭借而成,利用append(String)方法可以在编辑文件时,看到文件呈现一行一行的效果,可读性增强):

//文件内容
StringBuffer sb = new StringBuffer();
String content = "文件内容";
sb.append(content);
ByteArrayOutputStream baos = null;
baos = new ByteArrayOutputStream();
baos.write(sb.toString().getBytes("UTF-8"));
byte[] data = baos.toByteArray();
		
response.setContentLength(data.length);
response.getOutputStream().write(data);
response.flushBuffer();

如果你已经有了一个现成的文件,可以用以下代码设置:

InputStream fis = new FileInputStream(path);
OutputStream outputStream = response.getOutputStream();
int i = -1;
byte[] b = new byte[1024];
while((i=fis.read(b)) != -1){
	outputStream.write(b,0,i);
}
fis.close();
outputStream.close();
response.flushBuffer();
这样返回到前台后,客户端浏览器会自动进行下载(IE可能需要你点击确认以下),这样就完成文件下载功能了。

大家如果有什么疑惑,可以直接在下方评论或者私信博主,博主会尽量解答。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值