java用流下载文件,文件名乱码解决办法。

java用流下载文件

请看用流下载文件的常规方法:

@RequestMapping("/fileDownLoad")
    public void fileDownLoad(HttpServletResponse response, @RequestParam("id") Long id) {
 log.info("……fileDownLoad………start………");
        if (null == id) {
            return;
        }
        FileUploadRecord fileUploadRecord = iFileUploadRecordService.selectFileUploadRecordById(id);
        String Address = fileUploadRecord.getFileAddress();
        String filenamedisplay = null;
        filenamedisplay = Address.substring(Address.lastIndexOf(File.separator) + 1);
        log.info("文件名称为:" + filenamedisplay);
        File file = new File(Address);
        if (file.exists()) {
            OutputStream os = null; // 输出流
            InputStream in = null;
            try {
                in = new BufferedInputStream(new FileInputStream(file));
                byte[] buffer = new byte[in.available()];
                in.read(buffer);
                in.close();

                response.reset();
                response.setCharacterEncoding("utf-8");
                response.setContentType("application/octet-stream");
                response.setHeader("Content-Disposition", "attachment;fileName=" + new String(filenamedisplay.getBytes(), "iso-8859-1"));

                os = new BufferedOutputStream(response.getOutputStream());
                os.write(buffer);
                os.flush();
                os.close();

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (null != os) {
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (null != in) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
     }

这里注意:①下载内容编码格式response.setCharacterEncoding(“utf-8”);
②文件名有中文的话显示不出来,请看这里的处理办法: response.setHeader(“Content-Disposition”, “attachment;fileName=” + new String(filenamedisplay.getBytes(), “iso-8859-1”));

这样就能下载显示中文名称的文件了

发布了67 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/m0_37635053/article/details/103895183