Google cloud storage 是否可以将数据流(上传)存储在谷歌云存储的存储桶上,同时允许下载?
是否可以将数据流(上传)存储在谷歌云存储的存储桶上,同时允许下载? 我已经尝试使用云API,使用下面的代码将100MB的文件上传到bucket,但是在上传过程中,我在Google云控制台刷新bucket,直到上传完成,我才能看到新的上传文件。我想上传以H.264编码的实时视频,以存储在云存储上,因此大小未知,同时,其他用户可以开始下载它正在上载的文件事件。那有可能吗Google cloud storage 是否可以将数据流(上传)存储在谷歌云存储的存储桶上,同时允许下载?,google-cloud-storage,Google Cloud Storage,是否可以将数据流(上传)存储在谷歌云存储的存储桶上,同时允许下载? 我已经尝试使用云API,使用下面的代码将100MB的文件上传到bucket,但是在上传过程中,我在Google云控制台刷新bucket,直到上传完成,我才能看到新的上传文件。我想上传以H.264编码的实时视频,以存储在云存储上,因此大小未知,同时,其他用户可以开始下载它正在上载的文件事件。那有可能吗 Test code: File tempFile = new File("StorageSample"); Rand
Test code:
File tempFile = new File("StorageSample");
RandomAccessFile raf = new RandomAccessFile(tempFile, "rw");
try
{
raf.setLength(1000 * 1000 * 100);
}
finally
{
raf.close();
}
uploadFile(TEST_FILENAME, "text/plain", tempFile, bucketName);
public static void uploadFile(
String name, String contentType, File file, String bucketName)
throws IOException, GeneralSecurityException
{
InputStreamContent contentStream = new InputStreamContent(
contentType, new FileInputStream(file));
// Setting the length improves upload performance
contentStream.setLength(file.length());
StorageObject objectMetadata = new StorageObject()
// Set the destination object name
.setName(name)
// Set the access control list to publicly read-only
.setAcl(Arrays.asList(
new ObjectAccessControl().setEntity("allAuthenticatedUsers").setRole("READER"))); //allUsers//
// Do the insert
Storage client = StorageFactory.getService();
Storage.Objects.Insert insertRequest = client.objects().insert(
bucketName, objectMetadata, contentStream);
insertRequest.getMediaHttpUploader().setDirectUploadEnabled(false);
insertRequest.execute();
}
不幸的是,这是不可能的,因为: 对象是不可变的,这意味着上载的对象不能 在其整个存储生命周期内进行更改。对象的存储生存期 是对象创建(上载)成功与上载成功之间的时间 对象删除
这意味着云存储中的对象在上载完成时开始存在,因此在上载未完成之前,您无法访问该对象。谢谢您的回复。那么,你对我如何实现我期望的功能有什么建议吗?感谢一个可能的解决方案,就是用一个特定的命名约定把你的大对象分成小块。这样,一旦上传了一个小对象,用户就可以开始内容流。您需要处理不同对象上的智能缓冲和迭代,以便为用户提供平滑的体验。