将文件上传到Google Cloud Storage(Java)

您所在的位置:网站首页 谷歌上传图片 将文件上传到Google Cloud Storage(Java)

将文件上传到Google Cloud Storage(Java)

2024-07-11 11:41:36| 来源: 网络整理| 查看: 265

基本上,问题出在标题中:我不知道如何将文件上传到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();


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭