GCS Storage中如何选择上传方式
How to choose upload method in GCS Storage
我了解到 GCS Storage REST api 支持 3 种上传方法:
- 简单的 HTTP 上传
- 分块上传
- 已恢复上传
我看到 google-api-services-storage-v1 使用恢复上传方法,
但我很好奇如何改变这个,因为简历上传浪费
2 个 HTTP 请求,第一个用于元数据,第二个用于数据。
第一个请求的请求体就是{"name":"xxx"}。
InputStreamContent contentStream = new InputStreamContent(
APPLICATION_OCTET_STREAM, stream);
StorageObject objectMetadata = new StorageObject()
.setName(id.getValue());
Storage.Objects.Insert insertRequest = storage.objects().insert(
bucketName, objectMetadata, contentStream);
StorageObject object = insertRequest.execute();
我相信特定图书馆专门使用可恢复上传。可恢复上传对于大型传输非常有用,因为它们可以从错误中恢复并继续上传。这在某些情况下确实不是最佳选择,例如如果您想一次上传大量非常小的对象。
如果您想执行更简单的上传,您可能需要考虑另一个库,例如 gcloud-java,它可以像这样执行直接上传:
Storage storage = StorageOptions.defaultInstance().service();
Bucket bucket = storage.get(bucketName);
bucket.create(objectName, /*byte[] or InputStream*/, contentType);
那会 use only one request,尽管对于较大的上传,我建议坚持使用可续传上传。
我了解到 GCS Storage REST api 支持 3 种上传方法:
- 简单的 HTTP 上传
- 分块上传
- 已恢复上传
我看到 google-api-services-storage-v1 使用恢复上传方法, 但我很好奇如何改变这个,因为简历上传浪费 2 个 HTTP 请求,第一个用于元数据,第二个用于数据。
第一个请求的请求体就是{"name":"xxx"}。
InputStreamContent contentStream = new InputStreamContent(
APPLICATION_OCTET_STREAM, stream);
StorageObject objectMetadata = new StorageObject()
.setName(id.getValue());
Storage.Objects.Insert insertRequest = storage.objects().insert(
bucketName, objectMetadata, contentStream);
StorageObject object = insertRequest.execute();
我相信特定图书馆专门使用可恢复上传。可恢复上传对于大型传输非常有用,因为它们可以从错误中恢复并继续上传。这在某些情况下确实不是最佳选择,例如如果您想一次上传大量非常小的对象。
如果您想执行更简单的上传,您可能需要考虑另一个库,例如 gcloud-java,它可以像这样执行直接上传:
Storage storage = StorageOptions.defaultInstance().service();
Bucket bucket = storage.get(bucketName);
bucket.create(objectName, /*byte[] or InputStream*/, contentType);
那会 use only one request,尽管对于较大的上传,我建议坚持使用可续传上传。