使用 Java API 在 Openstack Swift 中复制文件时如何指定可选参数

How can I specify optional parameters when copy files in Openstack Swift using Java API

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

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

Content-Disposition=attachment;filename=thefilename.xxx

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

为了复制文件,我使用了 ObjectApi:

中的方法
boolean copy(String destinationObject, String sourceContainer, String sourceObject)

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

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

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

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

这是我指定 Content-Disposition header 的方式,避免复制 X-Delete-At header:

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);