Spring Content 1.2.5 JPA(Postgres) .docx文件突变为zip归档



已保存"文件的mime类型为application/vnd.openxmlformats-officedocument.wordprocessingml.document。但是当我访问Spring Content的端点并下载时它不是Word文档,而是Zip存档(application/Zip))。Spring Content 1.2.5支持"。docx";文件,我们如何修复它?

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

编辑

虽然我知道结果文件毕竟是docx,我们可以选择以Word文档的形式打开它,但是有没有一种方法可以让客户不那么困惑,并返回为"。docx"格式吗?在我的情况下,大量的文档很可能会以这种格式发送

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

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

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

@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端点获取内容(再次,我假设)时,它将设置以下头:

  • 的content - type头
  • 内容处理表单-数据附件头

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

这应该允许你从浏览器发出以下get请求。

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

它应该下载附件为test.docx

另外,我很想知道你为什么要添加自己的"create"端点,而不是使用Spring Data REST/Spring Content REST端点。它会自动为你做这件事。我想这是因为你不想使用Spring Data REST?

最新更新