zoukankan      html  css  js  c++  java
  • spring boot中文件下载会把return的内容也写入下载文件

    下载部分的代码

    前台:

    <a  th:href="'/FileDownload?fileDirType=meeting_minute_docx&fileName='+${meetingMsg.meetingId}+'.docx&fileId='+${meetingMsg.meetingId}+'.docx'"  >纪要文件.doc</a>

    后台:

    @ResponseBody
        @RequestMapping("/FileDownload")
        public String  downLoad(HttpServletResponse response,@RequestParam( "fileDirType") String fileDirType,@RequestParam( "fileName") String fileName,@RequestParam( value = "fileId",required = false) String fileId
                               ) throws UnsupportedEncodingException {
    
            System.out.println("fileDirType:"+fileDirType);
            File fileDir=UploadUtils.getDownLoadDirFile(fileDirType);
            String filePath = fileDir.getAbsolutePath();
            File file = new File(filePath + "/" + fileId);
    
            System.out.println(file.getAbsolutePath());
    
            if(file.exists()){ //判断文件父目录是否存在
                response.setContentType("application/plain;charset=UTF-8");
                response.setCharacterEncoding("UTF-8");
                response.setHeader("Content-Disposition", "attachment;fileName=" +   java.net.URLEncoder.encode(fileName,"UTF-8"));
                byte[] buffer = new byte[1024];
                FileInputStream fis = null; //文件输入流
                BufferedInputStream bis = null;
                OutputStream os ; //输出流
                try {
                    os = response.getOutputStream();
                    fis = new FileInputStream(file);
                    bis = new BufferedInputStream(fis);
                    int i = bis.read(buffer);
                    while(i != -1){
                        os.write(buffer, 0, i);
                        i = bis.read(buffer);
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println("----------file download---" + fileName);
                try {
                    bis.close();
                    fis.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return "下载成功";
            }
            return "下载失败";
        }

    下载docx文件打开时有一个问题:(点击是后发现可以正常显示,但发现下载后的docx比原文件大了)

     下载txt文件发现多了一个“下”字,也就是说把return中的内容也加进来了。

    把downLoad方法改为void后下载可正常显示,目前还不清楚原因。

  • 相关阅读:
    Ext4文件系统架构分析(二)
    Ext4文件系统架构分析(一)
    STL容器与拷贝构造函数
    左值、右值与右值引用
    C++ 11右值引用
    读书笔记_Effective_C++_条款二十五: 考虑写出一个不抛出异常的swap函数
    《Effective C++》item25:考虑写出一个不抛异常的swap函数
    CC++ vector 构造函数 & 析构函数
    复制构造函数 与 赋值函数 的区别
    a++与++a
  • 原文地址:https://www.cnblogs.com/ssyh/p/12496474.html
Copyright © 2011-2022 走看看