Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将Base64字符串上载到Google云存储_Android_Google App Engine_Google Cloud Storage - Fatal编程技术网

Android 将Base64字符串上载到Google云存储

Android 将Base64字符串上载到Google云存储,android,google-app-engine,google-cloud-storage,Android,Google App Engine,Google Cloud Storage,在我的appengine方法中,我从Android应用程序发送了一个base64字符串,我想将该图像上传到谷歌云存储 我使用 byte[] data = Base64.decodeBase64(base64String); 然后我创建一个存储对象来连接它 Storage.Builder storageBuilder = new Storage.Builder(httpTransport,new JacksonFactory(),credential); Storage storage = st

在我的appengine方法中,我从Android应用程序发送了一个
base64字符串
,我想将该图像上传到
谷歌云存储

我使用

byte[] data = Base64.decodeBase64(base64String);
然后我创建一个
存储
对象来连接它

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

我有bucket名称和映像名称,但如何将字节[]插入存储器

最简单的方法是将字节[]转换为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");
  }
}

Insert
对象没有
setContent()
setContentType()
。这些示例也可能已经过时,因为
storage.objects().insert
不再接受Inputstream,而只接受
AbstractInputStreamContent
嘿,刚刚回到我的办公桌。这里有一个新的版本,你知道,它实际上是有效的。另外一个简单的问题是,如果你在inputstream上设置内容类型,你需要在
StorageObject
上设置它吗?我想如果你不在元数据中,它可能会起作用。@BrandonYarbrough请为python中的相同问题添加代码。