2016-11-09 27 views
2

是否可以將數據流(Upload)存儲在Google雲存儲桶中並允許同時下載? 我試圖使用Cloud API上傳一個100MB文件到存儲桶,但使用下面的代碼,但在上傳期間,我刷新了Google雲端控制檯中的存儲桶,直到上傳時才能看到新的上傳文件完成。我想上傳用H.264編碼的實時視頻以存儲在雲存儲上,因此其大小未知,與此同時,其他用戶可以開始下載正在上傳的文件事件。那有可能嗎?是否可以將數據流(Upload)存儲在Google雲存儲桶中並允許同時下載?

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

回答

0

不幸的是這是不可能的,因爲狀態documentation中:

對象是不可變的,這意味着一個上傳的對象不能在其整個壽命存儲變化 。對象的存儲生命週期 是成功創建對象(上載)和成功刪除對象 之間的時間。

這意味着雲存儲中的一個對象在上傳完成後開始存在,因此只有上傳完成後才能訪問該對象。

+0

感謝您的回覆。所以你有什麼建議我可以做我期望的功能嗎?謝謝 –

+0

一個可能的解決方案,將用特定的命名約定將大對象分成更小的塊。通過這種方式,一旦小對象被上傳,用戶就可以開始流式傳輸內容。您將需要處理智能緩衝和對不同對象的迭代,以便爲用戶提供流暢的體驗。 –

相關問題