将文件上传到Google Cloud Storage(Java) |
您所在的位置:网站首页 › 谷歌上传图片 › 将文件上传到Google Cloud Storage(Java) |
基本上,问题出在标题中:我不知道如何将文件上传到Google存储空间 我已经检查过此网页: https://cloud.google.com/storage/docs/uploading-objects 建议在Java语言标签中"上载对象"使用以下两行: 12InputStream content = new ByteArrayInputStream("Hello, World!".getBytes(UTF_8)); Blob blob = bucket.create(blobName, content,"text/plain");可以从storage对象接收上面的bucket对象,这实际上是问题的根源 到目前为止,在我看过的所有教程中(特别是在本教程中:https://support.google.com/dfp_premium/answer/1733127?hl = zh-CN),storage属于com.google.api.services.storage.Storage而不是com.google.cloud.storage.Storage,并实例化如下: 12345678910111213 httpTransport = GoogleNetHttpTransport.newTrustedTransport(); GoogleCredential credential = new GoogleCredential.Builder() .setTransport(httpTransport) .setJsonFactory(JacksonFactory.getDefaultInstance()) .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) .setServiceAccountScopes( Collections.singleton(STORAGE_SCOPE)) .setServiceAccountPrivateKeyFromP12File(p12File).build(); storage = new com.google.api.services.storage.Storage.Builder(httpTransport, JacksonFactory.getDefaultInstance(), credential) .setApplicationName(PROJECT_NAME).build();通过这种方式创建存储对象后,我们可以获取存储桶对象,如下所示: 12 com.google.api.services.storage.Storage.Buckets.Get object = storage.buckets().get(BUCKET_NAME); com.google.api.services.storage.model.Bucket bucket = object.execute();但是我不能使用com.google.api.services.storage.model.Bucket来上传文件,因为它没有上面提到的create()方法。我需要改用com.google.cloud.storage.Bucket。 我也检查了这个stackoverflow问题:将图像上传到Google Cloud Storage(Java) 并且提供的链接中的示例确实使用了com.google.cloud.storage.Storage和com.google.cloud.storage.Bucket,但它们从未像上面的代码一样显示如何传递凭据并实例化storage对象。 有人可以提供清晰,全面的Java代码片段,显示如何将文件上传到Google Cloud Storage,包括storage对象的所有必要凭据实例化吗? 编辑。换句话说,我需要像上面一样自定义com.google.cloud.storage.Storage的实例化,而不是使用此行:Storage storage = StorageOptions.getDefaultInstance().getService(); 编辑2。最终,我现在可以通过以下代码检索存储桶后上传文件: 12345GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(KEY_JSN)).createScoped(Lists.newArrayList("https://www.googleapis.com/auth/devstorage.read_write")); Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService(); Bucket bucket = storage.get(BUCKET_NAME);我剩下的一个细微之处是以下几行: 1Page buckets = storage.list();返回一个空列表。在能够通过get(bucket_name)接收特定的存储段meta的同时接收空的存储段列表是否有意义? 相关讨论 你检查了吗? 特别是,将代码传递到服务帐户的路径部分中的代码。 您可以在客户端库中进行类似的身份验证。 @Mangu感谢您的反馈,您可以重新检查上面的更新吗? storage.list()应该返回一个Page对象,您可以像这样进行迭代。 忽略list()方法中的选项,它只是限制结果的唯一选项。 @Mangu那就是我现在正在做的事情,我调用了storage.list().iterateAll(),然后我从中获取了Iterable,然后我获取了Iterator,但它为空。 (该链接中的代码不正确,iterateAll()返回Iterable,而不是Iterator) 多数民众赞成在奇怪的是,有2个桶与该项目相关联。 也许应该在创建凭证或存储时在某个位置显式指定项目名称(已为其创建服务帐户和json密钥的项目名称)(尽管我想它已经由json密钥本身标识了)我能够使用来自文档的以下片段中的com.google.cloud.storage库创建并上传到存储桶: 123456789public void createBlobFromByteArray(String blobName, String jsonPath, String bucketName) throws IOException { GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(jsonPath)).createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform")); Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService(); Bucket bucket = storage.create(BucketInfo.of(bucketName)); Blob blob = bucket.create(blobName,"Hello, World!".getBytes(UTF_8),"text/plain"); }您需要在其中创建一个JSON服务帐户密钥,然后从Google Cloud控制台下载它。 然后将其传递给GoogleCredentials方法以验证'storage' 相关讨论 感谢您的反馈,您可以重新检查上述问题的edit2吗? 即时通讯使用建议的方式,但收到的存储桶列表为空您是否找出原因? storage.list()返回项目中的存储桶列表。 这对我来说可以。 编辑#1: 您是否尝试使用Google API客户端库而不是Cloud Client库? 下面的示例代码: 1234567891011121314151617181920212223242526 try { httpTransport = GoogleNetHttpTransport.newTrustedTransport(); // Authenticate using Google Application Default Credentials. GoogleCredential gCredential = GoogleCredential.getApplicationDefault(); if (gCredential.createScopedRequired()) { List scopes = new ArrayList(); // Set Google Cloud Storage scope to Full Control. scopes.add(ComputeScopes.DEVSTORAGE_FULL_CONTROL); } // Create Storage object for listing buckets. Storage storage = new Storage.Builder(httpTransport, JSON_FACTORY, gCredential) .setApplicationName(APPLICATION_NAME) .build(); Buckets buckets = storage.buckets().list(projectId).execute(); |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |