【问题标题】:How can I specify optional parameters when copy files in Openstack Swift using Java API使用Java API在Openstack Swift中复制文件时如何指定可选参数
【发布时间】:2018-02-13 11:02:32
【问题描述】:

我在 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 或以某种方式使用所需的标头调用该服务。

【问题讨论】:

    标签: java rest rackspace openstack-swift rackspace-cloudfiles


    【解决方案1】:

    帮助我解决问题的方法是将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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多