2 qq 22118963 qq_22118963 于 2016.01.14 10:29 提问

文件后缀名乱码怎么解决.. 10C

今天遇到一个奇葩需求,文件后缀名是中文的.
例子:文件名.后缀名
文件名不会乱码,但是后缀名会乱码,求大神指点..
后台是java的.
而且就ie8不行,使用其他浏览器,以及高版本ie显示正常.

 @RequestMapping("/download")
    public HttpServletResponse download(String fileName, HttpServletRequest request,
            HttpServletResponse response,String fileUrl) throws Exception {
        try {
            //获得文件
            File file = new File(fileUrl);

            //获取文件名
            fileName = URLDecoder.decode(fileName,"utf-8");

            //获得文件后缀名
            String ext = fileName.substring(fileName.indexOf(".")+1).toUpperCase();

            //以流的形式下载文件
            InputStream is = new BufferedInputStream(new FileInputStream(file));
            byte[] buffer = new byte[is.available()];
            is.read(buffer);
            is.close();

            //设置response header
            response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes()));
            response.addHeader("Content-Length", "" + file.length());
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
        return response;
    }

图片说明图片说明

5个回答

CSDNXIAOD
CSDNXIAOD   2016.01.14 10:31

Visual C++文件后缀名释义
c++ 获取文件后缀名
.NET 获取文件后缀名
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

91program
91program   Ds   Rxr 2016.01.14 10:36

调试一下看看代码中与文件名相关的变量的值是否正确?
如果正确,可能是某些函数对文件名编码的要求。

qq_22118963
qq_22118963 在后台都是中文的.传到浏览器,就乱码了.不知道是不是浏览器哪里要设置.
接近 2 年之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.14 11:20

就是低版本的IE浏览器的问题了,你的Java代码已经正确处理编码了,没有问题的。而且现在大家都是用高版本浏览器的。

shuaijie456
shuaijie456   2016.01.14 15:26

ext = URLDecoder.decode(ext ,"utf-8");

q444916237
q444916237   2016.01.14 21:14

try {

        String path = file.getPath();
        String fileName = file.getName();
        InputStream fis = new BufferedInputStream(new FileInputStream(path));
        byte[] buffer = new byte[fis.available()];
        fis.read(buffer);
        fis.close();

        response.reset();
        // attchment改成inline,在浏览器中打开
        response.addHeader("Content-Disposition", "attachment;filename="
                + new String(fileName.getBytes("utf-8"), "ISO8859_1"));

        // 设置返回的文件类型
        response.addHeader("Content-Length", "" + file.length());

        // 得到向客户端输出二进制数据的对象
        OutputStream toClient = new BufferedOutputStream(
                response.getOutputStream());

        response.setContentType("application/x-msdownload");
        toClient.write(buffer);
        toClient.flush();
        toClient.close();
    } catch (Exception ex) {
        ex.printStackTrace();
    }

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!