zoukankan      html  css  js  c++  java
  • response与文件下载

    参考博客:

    http://www.cnblogs.com/lcpholdon/p/4380980.html

    http://www.cnblogs.com/mingforyou/p/3281945.html

    之前在文件上传下载功能时遇到了一些问题

    1.页面选了多文件,但是上传后后台只能接受单文件

    2.不能异步上传,没有进度条

    3.文件下载,文件名字中有中文时下载报错,下能下载文件

    4.文件中有英文空格时,firefox下载时可能会丢失文件类型,导致不能正确打开

    通过学习springMVC学习指南中,解决了1,2问题,3,4问题是朋友解决的

    这里重点来讨论一下3,4问题。

    首先下载文件的代码参考如下,代码来自于参考博客

    //在servlet里读取资源
    //得到资源的绝对地址
    String path = this.getServletContext().getRealPath("/download/1.jpg");
    //截取文件地址,最后一个斜杠后面的文件名
    String filename = path.substring(path.lastIndexOf("\") + 1);
    
    //设置以何种方式打开文件
    //下载的图片名为中文的,修改编码
    response.setHeader("Content-Disposition", "attachment;filename =" + URLEncoder.encode(filename, "utf-8"));
    response.setHeader("Content-Disposition", "attachment;filename" + filename);
    InputStream in = null;
    OutputStream 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();
    }
    }
    } 

    上面有一行很重要的代码URLEncoder.encode(filename, "utf-8");这个解决文件名字中有中文的问题。

    这样貌似也可以

    (1)MimeUtility.encodeWord("中文.txt");//现在版本的IE还不行

    (2)new String("中文".getBytes("GB2312"),"ISO8859- 1");

    详细的可以参考参考博客

    问题4,只能把空格替换为其他符号了,或者去掉,目前没有更好的办法,也不知道原因,替换的话建议替换为中文空格或者下划线

  • 相关阅读:
    微信公众号分析
    微信自动聊天机器人
    使用itchat分析自己的微信(1)
    内容补充 ----- 易错点
    运算符优先级
    亡羊补牢系列之字符串格式化
    亡羊补牢之python基础语法
    python基础,构建一个301个字典库
    mysql每个表总的索引大小
    mysql 查看单个表每个索引的大小
  • 原文地址:https://www.cnblogs.com/rocky-AGE-24/p/5678713.html
Copyright © 2011-2022 走看看