[英]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.