元数据、内容长度为GCS对象



两件事:

  1. 我正在尝试在GCS对象签名URL上设置自定义元数据。
  2. 我试图在GCS对象签名URL上设置最大文件大小。

使用以下代码:

Map<String, String> headers = new HashMap<>();
headers.put("x-goog-meta-" + usernameKey, username);
if (StringUtils.hasText(purpose)) {
headers.put("x-goog-meta-" + purposeKey, purpose);
}
if (maxFileSizeMb != null) {
headers.put("x-goog-content-length-range", String.format("0,%d", maxFileSizeMb * 1048576));
}
List<Storage.SignUrlOption> options = new ArrayList<>();
options.add(Storage.SignUrlOption.httpMethod(HttpMethod.POST));
options.add(Storage.SignUrlOption.withExtHeaders(headers));
String documentId = documentIdGenerator.generateDocumentId().getFormatted();
StorageDocument storageDocument =
StorageDocument.builder().id(documentId).path(getPathByDocumentId(documentId)).build();
storageDocument.setFormattedName(documentId);
SignedUrlData.SignedUrlDataBuilder builder =
SignedUrlData.builder()
.signedUrl(storageInterface.signUrl(gcpStorageBucket, storageDocument, options))
.documentId(documentId)
.additionalHeaders(headers);

首先生成的签名URL有效,我可以上传文档。

现在我期望通过控制台视图看到对象元数据。但是没有元数据集。content-length-range也不受尊重。当"content-length-range"设置为"0,1"时,可以上传1.3 MB的文件。

当我上传一个更大的文件(~ 5 MB)时,发生了一些事情,但是在content-length-range中。我收到一个错误信息:Metadata part is too large..

您可以在这里看到content-length-range需要最小和最大大小。这个范围使用的单位是字节,正如您在这个例子中看到的。

我也注意到你使用了x-goog-content-length-range,我找到了这个文档,当使用这个头时要考虑:

  1. 使用PUT请求,否则将被静默忽略。
  2. 如果请求内容的大小超出指定范围,则请求失败,并在响应中返回400 Bad request代码。
  3. 你必须设置最小和最大的字节大小。

相关内容

  • 没有找到相关文章

最新更新