Java 将docx文件设置为HttpServletResponse

Java 将docx文件设置为HttpServletResponse,java,http-headers,apache-poi,httpresponse,docx,Java,Http Headers,Apache Poi,Httpresponse,Docx,我正在尝试设置一个docx文件,以作为附件下载对api的响应。但是,当我下载API生成的文件时,它已损坏,无法打开,即使初始文件很好并且可以显示。 这是我的控制器方法: byte[] fileAsBytes= readFileToByteArray(new File(fileLocation)) response.setContentType("application/vnd.openxmlformats-officedocument.wordproce

我正在尝试设置一个docx文件,以作为附件下载对api的响应。但是,当我下载API生成的文件时,它已损坏,无法打开,即使初始文件很好并且可以显示。 这是我的控制器方法:

        byte[] fileAsBytes= readFileToByteArray(new File(fileLocation))
        response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
        response.setHeader("Content-Disposition", "attachment; filename=" + "output.docx");
        response.getOutputStream().write(fileAsBytes);
用于获取字节数组的方法

public static byte[] readFileToByteArray(File file){
        FileInputStream fis = null;
        byte[] bArray = new byte[(int) file.length()];
        try{
            fis = new FileInputStream(file);
            fis.read(bArray);
            fis.close();
        }catch(IOException ioExp){
            ioExp.printStackTrace();
        }
        return bArray;
    }
当我尝试打开下载的文件时,它会显示“Word发现无法读取的内容”和“Word在尝试打开文件时遇到错误”

控制器类中的方法:

    @ApiOperation("get file as bytes")
    @PostMapping("/get-file")
    public void getFileAsbytes(HttpServletRequest request,
                                     HttpServletResponse response) throws IOException {

        byte[] fileAsBytes= documentsService.getFileAsBytes();

        response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
        response.setHeader("Content-Disposition", "attachment; filename=" + "output.docx");
        response.getOutputStream().write(fileAsBytes);
        response.flushBuffer();
    }

已解决:问题是与大摇大摆2版本。此错误在3.0.0版中已修复。问题在于Swagger 2版。此错误在3.0.0版中已修复

响应对象是否为HttpServletRespone?试试这个:
response.flushBuffer()写入流后。我测试了你的代码,工作正常。您是如何使用此API的?@JakubBiernaczyk是的,对象是HttpServletResponse。我试图在response.getOutputStream().write(fileAsBytes)之后添加flushBuffer(),但仍然遇到同样的问题。@delephin我用controller方法更新了代码,并通过swagger使用它。显然,问题在于打包文件时的swagger。我试着用硬编码的值制作一个GET-from-POST,并在浏览器中调用它,文件被下载了,一切正常。