使用spring mvc做文件下载时ie浏览器文件名乱码和下载不了问题解决

来源:互联网 发布:香酸枣淘宝 编辑:程序博客网 时间:2024/04/28 01:28
使用spring mvc做文件下载时遇到了一个问题,就是下载的文件的文件名会出现乱码的情况,代码如下
    @RequestMapping("/downloadFileT")        public ResponseEntity<byte[]> downloadFileT(Upload upload) throws IOException {            if (upload != null && upload.getNewName() != null) {            File file = new File(upload.getPath(), upload.getNewName());            if (file.exists()) {            String fileName = "";                if(request.getHeader("USER-AGENT").toLowerCase().contains("msie")){                fileName = URLEncoder.encode(upload.getName() , "UTF-8");                }else{                fileName = new String(upload.getName().getBytes("utf-8"),"iso-8859-1");                }                HttpHeaders headers = new HttpHeaders();              headers.setContentDispositionFormData("attachment;filename="+ fileName +";", fileName);               headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);               return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),                                              headers, HttpStatus.CREATED);                }        }        return null;    }

但是这样在ie浏览器下还是会出现文件名乱码和文件下载不了,后来发现ie浏览器是不支持201状态码的,则改成200,但是还是发现有问题,原因是ie11或者win10中用户代理字符串已经修改了,不再是“msie”了,添加了like Gecko,所以加上like gecko判断


修改代码如下,则成功运行

    @RequestMapping("/downloadFileT")        public ResponseEntity<byte[]> downloadFileT(Upload upload) throws IOException {            if (upload != null && upload.getNewName() != null) {            File file = new File(upload.getPath(), upload.getNewName());            if (file.exists()) {            String fileName = "";            String useragent = request.getHeader("USER-AGENT").toLowerCase();                if(useragent.contains("msie")||useragent.contains("like gecko")||useragent.contains("trident")){                //ie11或者win10中用户代理字符串已经修改了,不再是“msie”了,添加了like Gecko,所以加上like gecko判断                fileName = URLEncoder.encode(upload.getName() , "UTF-8");                }else{                fileName = new String(upload.getName().getBytes("utf-8"),"iso-8859-1");                }                HttpHeaders headers = new HttpHeaders();              headers.setContentDispositionFormData("attachment;filename="+ fileName +";", fileName);               headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);               return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),                            headers, HttpStatus.OK);    //ie浏览器不支持201的状态码,所以改成200 HttpStatus.OK
 } } return null; }



阅读全文
0 0
原创粉丝点击