新手上路Servlet下载图片出现乱码--练习笔记

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置响应的内容,告知浏览器用什么字符集
//response.setContentType(“text/html;charset=UTF-8”);
//response.setCharacterEncoding(“UTF-8”);
String path = this.getServletContext().getRealPath(“/WEB-INF/classes/头像.jpg”);
//获得文件名,并将文件名重新编码
String fileName=path.substring(path.lastIndexOf(“\”)+1);

    //第一种转码方式,但是火狐出现文件名%E5%A4%B4%E5%83%8F.jpg,360可以,IE没有文件名,冷汗!
    fileName=URLEncoder.encode(fileName, "UTF-8");
    //第二种方式这个3个浏览器都能正常显示,不过这个方法的原理还是不懂,先转成utf8再转成iso,难道浏览器上是反着在转2次,感觉应该就一次...希望学了request后能了解
    //fileName=new String(fileName.getBytes("UTF-8"),"ISO8859-1");

    response.addHeader("Content-Disposition", "attachment;filename="+fileName);

    ServletOutputStream sos = response.getOutputStream();
    FileInputStream fis =new FileInputStream(path);
    int len;
    byte[] arr=new byte[1024];

    while((len=fis.read(arr))!=-1){
        sos.write(arr, 0, len);
    }
    sos.close();
    fis.close();

第一次发表,当笔记用,萌新希望能和各位大神和小伙伴做朋友,有事留言哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值