Java downloads files with streaming, the file name is garbled solution.

java stream download file

See the conventional method of downloading files using streaming:

@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();
                    }
                }
            }
        }
     }

Note here: ①Download content encoding format response.setCharacterEncoding (“utf-8”);
②If the file name is in Chinese, it cannot be displayed, please see the processing method here: response.setHeader (“Content-Disposition”, “attachment; fileName = ”+ New String (filenamedisplay.getBytes (),“ iso-8859-1 ”));

So that you can download the file showing the Chinese name

Published 67 original articles · Liked12 · Visitors 10,000+

Guess you like

Origin blog.csdn.net/m0_37635053/article/details/103895183