是否可以将数据流(上传)存储到Google云存储桶中并允许同时下载?

时间:2016-11-09 10:08:26

标签: google-cloud-storage

是否可以将数据(上传)流式传输到Google云存储的存储区并允许同时下载? 我尝试使用Cloud API使用下面的代码将100MB文件上传到存储桶,但在上传期间,我在Google云控制台中刷新存储桶,在上传之前我无法看到新的上传文件完了。我想上传以H.264编码的实时视频存储在云存储中,因此大小未知,同时其他用户可以开始下载正在上传的文件事件。那有可能吗?

  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();
}

1 个答案:

答案 0 :(得分:0)

不幸的是,这不可能,如documentation中的状态:

  

对象是不可变的,这意味着上传的对象不能   在整个存储寿命期间改变。对象的存储生命周期   是成功创建对象(上传)和成功之间的时间   对象删除。

这意味着云存储中的对象在上传完成后就开始存在,因此在上传之前您无法访问该对象。