繁体   English   中英

使用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后端)到机架空间容器中的临时位置,然后发生某些事件(用户确认保存表单),我需要将这些文件移动到该容器中的持久位置。

我需要先从Web应用程序下载这些文件,所以在上传文件时,我指定了标头:

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

帮助我解决问题的是将jcouds库升级到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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM