Openstack4j поддерживает набор заголовков при загрузке изображения?
У меня есть проблема с хранилищем объектов OpenStack swift. Я хочу установить срок действия для объектов. я использую openstack4j
, Мой код объекта загрузки
public void add(String objectName, InputStream imageStream) {
OSClientV3 clientV3 = OSFactory.clientFromToken(swiftOS.getToken());
Map<String, String> metaData = new HashMap<>();
metaData.put("X-Delete-After", "120");
ObjectPutOptions objectPutOptions = ObjectPutOptions.create();
objectPutOptions.metadata(metaData);
clientV3.objectStorage().objects().put(container, objectName,
Payloads.create(imageStream), objectPutOptions);
}
Но это не работает. Тогда я попытался использовать быструю командную строку.
swift stat test test-19b8e4d4-1085-490d-b866-97f0ada0d46c
Что я получаю
Account: AUTH_01d73f1e49ed4dfd9535c831eed4ccf9
Container: test
Object: test-19b8e4d4-1085-490d-b866-97f0ada0d46c
Content Type: application/octet-stream
Content Length: 2414
Last Modified: Wed, 20 Dec 2017 07:58:56 GMT
ETag: 1cb55838010ed189c0698b6b5cade3ed
Meta X-Delete-After: 120
X-Openstack-Request-Id: tx4f1f57ef08e34d9296bfd-005a3a184b
X-Timestamp: 1513756735.97761
X-Trans-Id: tx4f1f57ef08e34d9296bfd-005a3a184b
Accept-Ranges: bytes
Когда я загружаю объект
swift upload test test.jpg -H "X-Delete-After: 120"
а потом
swift stat test test.jpg
Что я получаю
Account: AUTH_01d73f1e49ed4dfd9535c831eed4ccf9
Container: test
Object: test.jpg
Content Type: application/octet-stream
Content Length: 1688
Last Modified: Wed, 20 Dec 2017 08:03:20 GMT
ETag: 8a2d75ff8db40610a52a492abac09d3b
Meta Mtime: 1513755398.217256
X-Delete-At: 1513757119
Accept-Ranges: bytes
X-Timestamp: 1513756999.02865
X-Trans-Id: txc016e1aff901450aa934b-005a3a194c
X-Openstack-Request-Id: txc016e1aff901450aa934b-005a3a194c
Это как открытый документ.
The X-Delete-After header takes an integer number of seconds.
The proxy server that receives the request will convert this
header into an X-Delete-At header using its current time plus
the value given.
Но почему openstack4j не работает?
2 ответа
Похоже, мы можем использовать
objectPutOptions.getOptions().put("X-Delete-After", "120");
Поскольку вызов getOptions возвращает карту заголовков прямо вверх.
Вы должны использовать заголовок вместо метаданных:
objectPutOptions.header("X-Delete-After", "120");