1

使用 mimeType“application/vnd.openxmlformats-officedocument.wordprocessingml.document”保存“.docx”文件。但是当我在 Spring Content 中访问它的端点并下载它时,它并不完全是 Word 文档,而是 Zip 存档(application/zip)。Spring Content 1.2.5 支持“.docx”文件,我们如何修复它?

重现问题的演示项目(附加.docx文件): https ://github.com/leonaugust/docx-problem

编辑

虽然我知道生成的文件毕竟是 docx,我们可以选择将其打开为 Word 文档,但是有没有办法让客户不那么混淆并返回为“.docx”格式?在我的情况下,很可能会以这种格式发送大量文件

4

1 回答 1

2

正如您spring-content-rest在类路径上使用的@StoreRestResource注释一样,我假设您正在使用它来获取您的内容?如果不是这样,请告诉我,我会编辑。

有几个注释,如果实体上存在,spring content rest post/put端点将为您设置,然后由GET端点使用;@MimeType@OriginalFileName

如果您将这些注释添加到您的实体并在您的 post 端点中适当地设置它们,那么:-

    @PostMapping
    public UUID create(@RequestParam("file") MultipartFile multipartFile) {
        File file = new File();
        file.setMimeType(multipartFile.getContentType());
        store.setContent(file, multipartFile.getResource());
        file.setMimeType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
        file.setOriginalFileName(multipartFile.getOriginalFilename());
        UUID id = repository.save(file).getId();
        log.info("id {}", id);
        return id;
    }

当您的客户端通过 Spring Content REST 端点获取内容(我再次假设)时,它将设置以下标头:

  • 内容类型标头
  • 内容处置表单数据附件标头

关于回应。

两者都将指导浏览器应用程序正确处理内容。

这应该允许您从浏览器发出以下获取请求。

curl -H 'Accept: application/vnd.openxmlformats-officedocument.wordprocessingml.document' http://localhost:8080/storage/b9ca6fbe-dede-4a51-b444-9e22b798e922

它应该将附件下载为test.docx

另外,我很想知道您为什么添加自己的“创建”端点,而不是使用 Spring Data REST/Spring Content REST 端点。它会自动为您执行此操作。我认为这是因为您不想使用 Spring Data REST?

于 2021-10-28T04:31:36.040 回答