`

java IO流下载.docx文件时报文件损坏的错误

    博客分类:
  • JAVA
阅读更多
String fileId = request.getParameter("fileId");
            AttachFileVO attachFileVO = new AttachFileVO();
            attachFileVO.setFileId(fileId);       
            AttachFileVO attachFile = applicationService.getAttachFile(attachFileVO);
            String fileName = attachFile.getFileName();
            String formatFileName = CommonUtil.encodingFileName(fileName);  
            if(attachFile!=null&&attachFile.getFileContent()!=null){
                InputStream in = null;
                OutputStream os = null;
                try{               
                    response.reset();
                    response.setContentType(attachFile.getFileType());
                    response.setHeader("Content-Disposition", "attachment;filename="+formatFileName);
 
                    in = new ByteArrayInputStream(attachFile.getFileContent());
                    byte[] buffer = new byte[1024];
                    os = response.getOutputStream();
                    while (in.read(buffer) > 0) {
                        os.write(buffer);
                    }               
                }catch(Exception ex){
                    throw ex;
                }finally{
                    if(in!=null){
                        in.close();
                    }
                    if(os!=null){
                        os.close();
                    }                   
                }               
                return null;
            }

上面写法下载docx报错,更改:

 in = new ByteArrayInputStream(attachFile.getFileContent());
                byte[] buffer = new byte[1024];
                os = response.getOutputStream();
                int len = 0;
                while ((len = in.read(buffer)) > 0) {
                    os.write(buffer, 0, len);
                }  

  意思是将buffer里面0~len的字节写到输出流里面,下载的文件转换成字节流的字节数一般是不能被1024整除的,当输出最后一部分字节的时候,可能没有1024个字节,那么buffer字节数组里多出来的位置就是初始值0,这些也写到输出流里面去了,也就是多写了很多个值为0的字节进去,所以格式不对。

分享到:
评论

相关推荐

    java_io流讲解.docx.zip

    Java IO流是Java平台中处理输入输出操作的核心机制,它为数据传输提供了高效且灵活的方式。在Java中,一切输入输出都围绕着“流”进行,流是数据传输的抽象概念,代表数据的序列,可以是文件、网络、内存等不同来源...

    java文件流操作.docx

    以下是对标题"java文件流操作.docx"和描述中提到的知识点的详细说明: 1. **字节流(Byte Stream)**: Java中的`InputStream`类用于处理字节流,它提供了一种按字节读取文件内容的方式。`FileInputStream`是`...

    在 Linux 系统中搭建 Java 开发环境.docx

    在 Linux 系统中搭建 Java 开发环境.docx 在 Linux 系统中搭建 Java 开发环境.docx 在 Linux 系统中搭建 Java 开发环境.docx 在 Linux 系统中搭建 Java 开发环境.docx 在 Linux 系统中搭建 Java 开发环境.docx 在 ...

    IO流题目.docx

    1. **java.io包**:这是Java处理流的主要包,包含了处理字节流、字符流、文件流和对象流的相关类和接口。例如,`FileInputStream`用于读取文件的字节流,`FileOutputStream`用于写入文件,而`DataInputStream`和`...

    Java进阶IO流讲义大全.docx

    Java进阶IO流讲义大全.docx

    java IO文档.docx

    import java.io.*; public class HelloWorld { public static void main(String[] args) throws IOException { String fileName = "D:" + File.separator + "hello.txt"; File file = new File(fileName); ...

    公司内部Javaio流笔试题.docx

    Java IO 流是Java平台中用于处理输入输出的重要框架,涉及文件操作、网络通信等多个领域。以下是基于题目给出的部分内容的详细知识点解析: 1. **File 类**: - File 类在Java中用来代表文件和目录路径名的抽象...

    Java结合docx4j生成docx文件

    本篇文章将深入探讨如何使用Java结合docx4j库来创建和操作Microsoft Word的.docx文件。docx4j是一个强大的开源Java库,专门用于读写Open XML格式的文档,包括.docx、.xlsx和.pptx等。 首先,我们来看docx4j的基本...

    【高级工程师面试题】Java高级工程师简历表格.docx

    【高级工程师面试题】Java高级工程师简历表格.docx【高级工程师面试题】Java高级工程师简历表格.docx【高级工程师面试题】Java高级工程师简历表格.docx【高级工程师面试题】Java高级工程师简历表格.docx【高级工程师...

    《面向对象程序设计实践(Java)》教学大纲.docx

    《面向对象程序设计实践(Java)》教学大纲.docx《面向对象程序设计实践(Java)》教学大纲.docx《面向对象程序设计实践(Java)》教学大纲.docx《面向对象程序设计实践(Java)》教学大纲.docx《面向对象程序设计实践(Java)...

    2022年java io流学习总结.docx

    Java IO流是Java编程语言中处理输入输出的重要机制,它允许程序与外部设备(如硬盘、内存、网络等)之间交换数据。2022年的Java IO流学习总结主要涵盖以下核心知识点: 1. **流的概念**:流是数据传输的抽象概念,...

    Java将doc转docx工具类方法,maven项目,Idea可直接运行

    import java.io.*; public class DocToDocxConverter { public void convertDocToDocx(String docFilePath, String docxFilePath) throws IOException { // 读取.doc文件 FileInputStream fis = new ...

    word .docx文件格式转vue.html文件工具

    1. **解析.docx文件**:转换工具首先需要读取.docx文件,解析其内部的XML结构,提取文字、样式、图片等元素。 2. **转换为HTML**:解析出来的内容将按照HTML语法规则重新构造,保持原有的格式和布局。例如,段落...

    Delphi 编程技术与java,php,net.C++编程语言的对比.docx.zip

    Delphi 编程技术与java,php,net.C++编程语言的对比.docx.zipDelphi 编程技术与java,php,net.C++编程语言的对比.docx.zipDelphi 编程技术与java,php,net.C++编程语言的对比.docx.zipDelphi 编程技术与java,php,...

    java正则表达式使用.docx

    java正则表达式使用.docx 资源

    JAVA-IO流学习总结.docx

    综上所述,Java的IO流提供了一套完整的API来处理文件和网络等输入输出操作。了解各种流的特点及其使用方法对于开发高质量的应用程序至关重要。通过合理选择合适的流类型和正确使用流的操作方法,可以有效提高程序的...

    java高级特性 - io流.docx

    - **字符流**:处理字符数据,同样基于`java.io`包,支持字符编码和解码。字符流主要用于文本数据的处理。 2. **按功能分类**: - **节点流(Low-level Streams)**:直接操作磁盘文件,如`FileInputStream`和`...

    docx4j及其依赖包

    `docx4j`是一个强大的Java库,专门用于创建、修改和转换Microsoft Office Open XML (OOXML)文件,尤其是`.docx`格式的Word文档。这个库允许开发者在程序中对Word文档进行深度操作,如替换文本、插入图片、设置样式等...

    io流java题目.docx

    1. Java I/O 流:Java I/O 流是Java中用于处理输入输出操作的基础框架,包括字符流(Character Stream)和字节流(Byte Stream)。在这个题目中,主要涉及到的是字符流,因为我们要处理的是文本文件。字符流主要有...

    Qt,docx文件读写

    .docx文件是基于Open XML标准的,实际上是一个压缩的ZIP文件,包含XML文档、样式表、图像和其他资源。这意味着我们可以直接解压和分析这些文件来理解其内容结构。 Qt本身并不直接支持.docx文件的读写,但我们可以...

Global site tag (gtag.js) - Google Analytics