2016-02-05 171 views
1

在我的App Engine方法中,我從Android應用發送了一個base64 string,我想將該圖像上傳到Google Cloud Storage將Base64字符串上傳到Google雲端存儲

byte[] data = Base64.decodeBase64(base64String); 

然後解碼字符串到byte[]我創建了一個Storage對象連接到它

Storage.Builder storageBuilder = new Storage.Builder(httpTransport,new JacksonFactory(),credential); 
Storage storage = storageBuilder.build(); 

我有水桶的名字和形象的名字,但我要如何插入將byte []存入存儲器?

回答

1

最簡單的方法是簡單地將byte []轉換爲InputStream。 Java爲此提供了ByteArrayInputStream。

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; 
import com.google.api.client.http.HttpTransport; 
import com.google.api.client.http.InputStreamContent; 
import com.google.api.client.json.jackson2.JacksonFactory; 
import com.google.api.services.storage.Storage; 
import com.google.api.services.storage.model.StorageObject; 

import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.security.GeneralSecurityException; 

public class ByteUploader { 

    /* Simple function to upload a byte array. */ 
    public static void uploadByteStream(
     String bucket, String objectName, byte[] bytes, String contentType) throws Exception { 
    InputStreamContent contentStream = 
     new InputStreamContent(contentType, new ByteArrayInputStream(bytes)); 
    StorageObject objectMetadata = new StorageObject().setName(objectName); 
    Storage.Objects.Insert insertRequest = 
     getService().objects().insert(bucket, objectMetadata, contentStream); 
    insertRequest.execute(); 
    } 

    /* Simple no-auth service */ 
    private static Storage getService() throws IOException, GeneralSecurityException { 
    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 
    return new Storage.Builder(httpTransport, JacksonFactory.getDefaultInstance(), null) 
     .setApplicationName("myApplication") 
     .build(); 
    } 

    public static void main(String[] args) throws Exception { 
    ByteUploader.uploadByteStream("yarbrough-test", "foobar",new byte[]{0,1,2,3,4}, "text/plain"); 
    } 
} 
+0

'Insert'對象沒有'setContent()'只有'setContentType()'。這些例子也可能過時了,因爲'storage.objects()。insert'不再接受InputStream,只接受'AbstractInputStreamContent' – tyczj

+0

嘿,剛回到我的辦公桌。這是一個新版本,實際上,你知道,它的作品。 –

+0

另一個快速問題,如果你在輸入流上設置它,你是否需要在'StorageObject'上設置內容類型? – tyczj

相關問題