2016-02-05 2 views
1

В моем методе App Engine я отправил base64 string из своего приложения для Android, и я хочу загрузить это изображение в Google Cloud Storage.Загрузите строку Base64 в хранилище Google Cloud

Я декодировать строку в byte[] с

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

Затем я создаю Storage объект для подключения к нему

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

У меня есть имя ведра и имя изображения, но как я могу вставить байт [] в хранилище?

ответ

1

Самый простой способ - просто повернуть свой байт [] в 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() 'only' setContentType() '. Эти примеры также могут быть устаревшими, потому что 'storage.objects(). Insert' больше не принимает входной поток и принимает только' AbstractInputStreamContent' – tyczj

+0

Эй, только что вернулся к моему столу. Вот новая версия, которая, на самом деле, работает. –

+0

еще один быстрый вопрос: вам нужно установить тип содержимого на «StorageObject», если вы его устанавливаете на входном потоке? – tyczj

Смежные вопросы