Getting Started(Google Cloud Storage Client Library)

來源:互聯網
上載者:User

標籤:

在運行下面的步驟之前,請確保:

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。看到:

Getting Started(Google Cloud Storage Client Library)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.