`

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文件流操作.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 在 ...

    【Java基础笔记】IO流笔记.docx

    Java IO流笔记 Java IO流是Java语言中的一种输入/输出机制,用于读取和写入数据。IO流可以分为两大类:输入流和输出流。输入流用于读取数据,而输出流用于写入数据。 一、IO流分类 根据流向分类,IO流可以分为...

    10 IO11重定向.docx

    10 IO重10 IO11重定向.docx.docx10 IO重定向.docx

    Java实现doc文件转成docx文件

    import java.io.*; public class DocToDocxConverter { public static void main(String[] args) throws IOException { String sourceFilePath = "input.doc"; String targetFilePath = "output.docx"; // ...

    Java结合docx4j生成docx文件

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

    高级开发员面试宝典之JavaIO流的操作.docx

    Java IO 流是Java平台中的核心概念之一,用于在不同数据源之间传输数据,例如从文件到内存,从网络到磁盘等。在面试中,Java IO 流的知识点经常被问及,因为它涉及到文件操作、网络通信以及数据处理等多个方面。 ...

    【高级工程师面试题】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. **流的概念**:流是数据传输的抽象概念,...

    STM32-IO口操作.docx

    STM32_IO口操作.docx

    Java.ti11me.docx

    ..Java.ti11me.docx

    java高级特性 - io流.docx

    ### Java高级特性 - IO流详解 #### 一、概述 Java 中的 I/O(输入/输出)流是 Java 语言中用于处理输入和输出数据的重要机制。它提供了一种灵活的方式来读取和写入数据,可以用于文件操作、网络通信、数据流处理等...

    5.docx.zip

    3. **Java与文件操作**:在Java中,我们可以使用`java.io`和`java.nio`包来处理文件的读写操作。对于ZIP文件,可以使用`ZipInputStream`和`ZipOutputStream`来读取和创建ZIP文件;对于.docx文件,如果需要进行程序化...

    java复11习题.docx

    ..java复11习题.docx

    java缓11存.docx

    ..java缓11存.docx

    java试11题.docx

    ..java试11题.docx

    java面试项目简历.docx

    java面试项目简历.docx

    java门户网站模板.docx

    java门户网站模板.docx

    java软件工程师简历.docx

    java软件工程师简历.docx

Global site tag (gtag.js) - Google Analytics