2

我在 Java 应用程序中使用 Rackspace Cloud Files (Openstack Swift),并且有以下场景:我将文件上传到容器(从 web 应用程序,通过我的 java rest 后端)到 rackspace 容器中的临时位置,然后,当发生了一些事件(用户确认表单保存),我需要将这些文件移动到该(相同)容器中的持久位置。

我需要从我的网络应用程序下载这些文件,所以在上传文件时我指定标题:

Content-Disposition=attachment;filename=thefilename.xxx

我还为我的临时存储X-Delete-At中的文件指定了标题,因此如果用户不保存表单,它们可以自动删除。

对于复制文件,我使用ObjectApi的方法:

boolean copy(String destinationObject, String sourceContainer, String sourceObject)

它复制文件内容、文件元数据,但不复制 Content-Disposition。复制后好像没有办法设置。

问题是Cloud Files REST API允许为复制的目标文件指定 Content-Disposition 标头,但 Java API 不允许。我想知道是否有办法扩展该 API 或以某种方式使用所需的标头调用该服务。

4

1 回答 1

0

帮助我解决问题的是将jcouds库升级到v. 2.0.3

在这个版本中,ObjectApi包含参数化copy()方法,允许为复制的文件指定另一个标题(发送X-Fresh-Metadata标题)。

这就是我指定Content-Disposition标题并避免复制X-Delete-At标题的方式:

Map<String, String> contentMetadata = new HashMap<>();
contentMetadata.put("Content-Type", "image/jpeg");
contentMetadata.put("Content-Disposition", "attachment; filename=\"myfilename.jpg\"");
objectApi.copy(toPath, containerName, fromPath, new HashMap<>(), contentMetadata, CopyOptions.NONE);
于 2018-02-26T13:36:16.753 回答