Getting Started(Google Cloud Storage Client Library)

在运行下面的步骤之前,请确保:

1.你的项目已经激活了Google Cloud Storage和App Engine,包括已经创建了至少一个Cloud Storage bucket。

2.你已经下载了client库并解压了。

3.你已经安装并配置了最新的App Engine Java SDK。

运行LocalExample.java例子

LocalExample.java是一个非部署的例子,有助于快速测试和调查Cloud Storage的功能。除了Eclipse控制台输出它没有UI组件。(Cloud Storage client library deployable samples有UI也是可以获取的)

在Eclipse中运行LocalExample.java

1.开始Eclipse

2.在Eclipse中,单击Windows->Preferneces->Google->App Engine然后单击Add。

3.跟随提示,提供App Engine SDK的安装路径,然后单击OK。

4.在Files菜单中,单击Files->New->Java Project,创建一个名称为LocalExample的项目,并使用包名称com.google.appengine.demos。

5.在Package Explorer中选择这个项目,单击Files->New->Class并给这个类命名LocalExample,并使用包名称com.google.appengine.demos。

6.拷贝 LocalExampleJava source 的内容到这个类文件中。

7.在Package Explorer中再次选择这个项目,并右击,单击Properties->Java Build Path.

8.在Libraries tab,单击Add External Jars。必须追加下面的JARs:

● appengine-gcs-client.jar 来自你安装的Cloud Storage client库

● guava-15.0.jar 来自你安装的Cloud Storage client库

● joda-time-2.3.jar来自你安装的Cloud Storage client库

● appengine-testing.jar 来自App Engine 安装的子目录 /lib/testing

● appengine-api.jar 来自App Engine 安装的子目录 /lib/impl

● appengine-api-stubs.jar 来自App Engine 安装的子目录 /lib/impl

9.编译,运行Run as-> Java Application

10.在Eclipse Console中看到如下输出:

调查LocalExample.java例子

LocalExample.java在下面做了详细描述,说明了Cloud Storage client库的使用。

Imports

有一些使用的imports你可能不需要,或者本地测试会用到。下面列出了例子的imports。

import com.google.appengine.tools.cloudstorage.GcsFileOptions;
import com.google.appengine.tools.cloudstorage.GcsFilename;
import com.google.appengine.tools.cloudstorage.GcsInputChannel;
import com.google.appengine.tools.cloudstorage.GcsOutputChannel;
import com.google.appengine.tools.cloudstorage.GcsService;
import com.google.appengine.tools.cloudstorage.GcsServiceFactory;
import com.google.appengine.tools.cloudstorage.RetryParams;
import com.google.appengine.tools.development.testing.LocalBlobstoreServiceTestConfig;
import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig;
import com.google.appengine.tools.development.testing.LocalServiceTestHelper;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

下面简要介绍了这些imports:

com.google.appengine.tools.cloudstorage.*使我们可以使用Cloud Storage client库。

com.google.appengine.tools.development.testing.* 仅在做某些App Engine特性的本地单元测试时需要。

java.io.ObjectInputStream 和java.io.ObjectOutputStream 用来读写对象。

java.nio.ByteBuffer用于非缓冲的读写

java.io.IOException 错误处理时需要(尽管没有列出)

java.nio.channels.Channels 用于将输入输出通道转换为流

java.nio.channels.ReadableByteChannel 用于从Cloud Storage中读取数据

创建一个GcsService来发送请求

通过库发送和接受请求到Cloud Storage,你需要一个GcsService实例:

private final GcsService gcsService =
    GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());

在这个片段中,注意在createGcsService中RetryParams的使用。如上所示,createGcsService(RetryParams.getDefaultInstance()),这设置了默认的重试配置,当访问Cloud Storage时,发生超时或者意想不到的错误时会进行重试。为了指定不同的值,比如重试的最大次数,你使用RetryParams.Builder 在一个新的 RetryParams对象中改变配置,并且在创建GcsService时提供它。注意一旦这个GcsService对象被创建了,它的重试参数不能被改变。

你可以创建任意多的GcsService实例。每一个实例是独立的,不可变的(因此是线程安全的),可重复使用的。比如,一个可以使用某个参数设置来写文件,同时另一个可以使用不同的重试参数来读不同的文件。

一个推荐的实践是在你的每个I/O类中使用独立的实例。这将帮助保持你的类的独立,以及少的开销。

向Cloud Storage写数据

下面的例子展示了如何向Cloud Storage的文件中写数据。独立的片段提供了写可序列化对象数据和字节数组。

Cloud Storage文件不会完全创建好直到close被调用

在下面的片段中,在finally块中没有出现close,就像Java中经常做的。所以有异常时,任何被写的部分都会自动地被清除。

向Cloud Storage写对象

这儿是说明如何序列化对象到Cloud Storage 文件。首先,获取一个可写的字节通道:

GcsOutputChannel outputChannel =
    gcsService.createOrReplace(fileName, GcsFileOptions.getDefaultInstance());

在这个片段中GcsService.createOrReplace 被调用了,GcsFilename 作为第一个参数。这个对象包含了要使用的bucket的名称以及对象的名称。如果在bucket已经有了一个同名的对象,并且你的应用有写的权限,这个调用会覆盖存在的文件(Cloud Storage不支持附加)。如果没有那个名字的文件,这个调用的结果就是创建了一个新文件。

第二个参数是GcsFileOptions。要使用默认的选项,使用GcsFileOptions.getDefaultInstance。要使用自己的设置,使用GcsFileOptions.Builder来设置选项并创建一个GcsFileOptions作为第二个参数。

这个文件选项被传递给Cloud Storage告诉它文件的文本类型,在头部你想传递的用户元数据,文件访问管理ACL等等。如果你不提供一个文本类型(mimeType),这个文件将会被Cloud Storage以默认的MIME类型提供(serve),目前使用的是binary/octet-stream。如果你不指定一个ACL,分配的对象访问权限是当前默认的对象ACL。

注意所有的文件选项信息都可以通过在一个Close之后,通过调用GcsService.getMetadata(fileName)从一个对象中获取,而不需要它自己下载这个对象。

关于更多的配置信息,浏览Cloud Storage文档的ACLs和file options。

现在使用一个输出流来写数据

@SuppressWarnings("resource")
ObjectOutputStream oout =
    new ObjectOutputStream(Channels.newOutputStream(outputChannel));
oout.writeObject(content);
oout.close();

向Cloud Storage文件中写字节数组

这儿说明如何向Cloud Storage文件中写字节数组。

@SuppressWarnings("resource")
GcsOutputChannel outputChannel =
    gcsService.createOrReplace(fileName, GcsFileOptions.getDefaultInstance());
outputChannel.write(ByteBuffer.wrap(content));
outputChannel.close();

在createOrReplace调用中使用的参数的说明,参见Writing an Object to Cloud Storage下的说明。

从Cloud Storage中读取数据

下面的例子说明如何从存储在Cloud Storage中的文件读取数据。分开的片段提供了读Cloud Storage文件到对象(序列化)和字节数组。

将Cloud Storage读到一个对象

这个方法对于读大文件到一个缓冲中是有用的。

GcsInputChannel readChannel = gcsService.openPrefetchingReadChannel(fileName, 0, 1024 * 1024);

这个调用 GcsService.openPrefetchingReadChannel 有一个 GcsFilename,它包含了要读取的bucket的名字和要被读的对象。第二个参数是文件开始读的字节,0表示从文件的开头开始读。如果你提供了文件中其他的开始位置,比如字节300,这个读操作从字节300开始到文件的末尾,或直到你停止读。(预读缓冲会先读,它将包含超过你停止的位置的字节)

预读对大部分应用而言是一个主要的优势,因为当更多的数据正在后台被下载的时候,允许并行地处理文件的一部分。

第三个参数就是预读的缓冲的尺寸,在这个例子中设置为1MB。

现在,从通道中读文件:

try (ObjectInputStream oin = new ObjectInputStream(Channels.newInputStream(readChannel))) {
  return oin.readObject();
}

读数据到字节数组

对于小文件,你可以一次读取所有的文件到字节数组中:

int fileSize = (int) gcsService.getMetadata(fileName).getLength();
ByteBuffer result = ByteBuffer.allocate(fileSize);
try (GcsInputChannel readChannel = gcsService.openReadChannel(fileName, 0)) {
  readChannel.read(result);
}

在上面的片段中,注意java.nio.ByteBuffer的使用,特别是缓冲的尺寸的设置等于要从通道中读取的文件的尺寸。

注意,对于大多数应用,更喜欢的方法是读(stream)文件(读数据到对象中),因为这不需要在内存中一次就保存所有的数据。

有UI的可部署的Cloud Storage Client库的例子

对于有UI的可部署例子,浏览代码:

● GcsExampleServlet.java从Cloud Storage中上传下载文件

● PortOfFilesAPIGuestbookServlet.java是例子程序的端口(port),之前使用现已过时的Files API。更多关于迁移的信息,参见Migrating from the Files API。

在development server上运行以及部署之前需哟啊编译这个例子。

编译这个例子:

1.从终端中Checkout代码

svn checkout http://appengine-gcs-client.googlecode.com/svn/trunk/ appengine-gcs-client-read-only

2.改变目录到ppengine-gcs-client-read-only/java

3.调用ant compile_example,这会用目录中的build.xml来编译例子。更多的关于使用Apache Ant的信息,参见 Using Apache Ant.

4.调用下面命令,运行dev server:

/path/to/AppEngSDK/dev_appserver.sh  /path/to/example/war

5.在你的浏览其中浏览 localhost:8080。看到下图:

时间: 2024-12-17 22:46:43

Getting Started(Google Cloud Storage Client Library)的相关文章

Downloading the Google Cloud Storage Client Library

Google Cloud Storage client是一个客户端库,与任何一个生产环境使用的App Engine版本都相互独立.如果你想使用App Engine Development server开测试你的代码,你必须使用App Engine SDK 1.8.1及更高版本的development server. 下载Google Cloud Storage client库 你可以使用流行的工具,比如Apache Maven,Apache Ivy,Git来下载库,或者你可以从Maven库手动下

Java Client for Google Cloud Storage

关于Google Cloud Storage Google Cloud Storage有益于大文件的存储与服务(serve).此外,Cloud Storage提供了对访问控制列表(ACLs)的使用,提供了对上传中断的恢复功能以及其他的特性.Google Cloud Storage client库对应用自动使用恢复功能,提供了一种健壮的导(stream)数据到Cloud Storage的方法. 关于client library Google Cloud Storage client库使你的应用可以

Activating Google Cloud Storage

先决条件 你需要下面的内容: 1.一个Google账户,比如来自Gmail.如果你没有,请在Google account signup site注册. 2.一个新的或已经存在的Google Developer Console项目.如果你没有一个存在的项目,在Google developer console中创建一个新项目. 3.对你的项目来讲可用的两个Cloud APIs:Google Cloud Storage和Google Cloud Storage JSON API.为了做到这点,请选择你

操作系统:Android(Google公司开发的操作系统)

ylbtech-操作系统:Android(Google公司开发的操作系统) Android是一种基于Linux的自由及开放源代码的操作系统.主要使用于移动设备,如智能手机和平板电脑,由Google(谷歌)公司和开放手机联盟领导及开发.尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”.Android操作系统最初由Andy Rubin开发,主要支持手机.2005年8月由Google收购注资.2007年11月,Google与84家硬件制造商.软件开发商及电信营运商组建开放手机联盟共同研发改

google cloud storage products

https://cloud.google.com/products/storage/ BigTable Cloud Bigtable 是 Google 面向大数据领域的 NoSQL 数据库服务.它也是为 Google 搜索.Analytics(分析).地图和 Gmail 等众多核心 Google 服务提供支撑的数据库. https://cloud.google.com/bigtable/docs/?_ga=2.253537231.-792515609.1538018833 Cloud Bigta

微服务学习三:springboot与springcloud集成之Eurake的使用(server端,client端)

这个多亏了网站上的一个大神的博客: http://blog.csdn.net/forezp/article/details/70148833 强烈推荐学习: 1.springcloud是什么,这个大家百度吧,我一会也说不明白,但是比dubbo更强大,包含了dubbo的内容,也包含了比dubbo更多的内容. 2.什么是Eurake?关于这个我觉得如果大家知道zookeeper就明白了Eurake的优势. springcloud集成了Eurake,所以对于服务的治理注册更方便简洁了,而且不需要安装,

python编程(基于twisted的client编程)

[ 声明:版权全部,欢迎转载.请勿用于商业用途. 联系信箱:feixiaoxing @163.com] python的twisted比較有意思,既能够做server方面的编程,也能够做client方面的编程.关于这方面的编程.最简单的样例就是echo. client 代码例如以下, #!/usr/bin/python from twisted.internet.protocol import Protocol, ClientFactory from sys import stdout from

行人检测算法(ICF DPM)&CCV(A Morden Computer Vision Library)的使用&VisualBox下使用Ubuntu

由于最近要用到ICF,DPM等新的行人检测算法,找到了开源库CCV http://libccv.org/tutorial/ ,但代码是在linux平台下的,公司机器又不允许自己装双系统,就使用了Visual Box+Ubuntu来进行实现,具体的实现步骤如下: 一.安装VisualBox+Ubuntu 1 下载VisualBox https://www.virtualbox.org/ 2 下载Ubuntu http://www.ubuntu.com/download ,下载和自己CPU位数一致的

Windows环境下访问NFS(33篇Storage的文章)

Windows环境下访问NFS 使用Solaris时,如果想在两台Solaris之间共享数据,那么你想到的最省事.最方便的方法肯定是nfs.但是现在的学生们的桌面,估计99%以上都是Windows,Windows和Solaris进行数据共享,大家能够想到的估计是Samba或者是FTP.能不能在Solaris和Windows之间使用NFS进行数据共享呢?答案是肯定的. 首先,想要通过NFS实现Solaris和Windows只见实现数据共享,第一件事是装一台Solaris,然后share一下你的目录