3

我想從我的Android應用程序上傳Google Cloud Storage上的圖像。爲此我搜索並發現GCS JSON Api提供此功能。我爲Android示例做了大量的研究,演示了它的使用。在developer site上,他們提供了僅支持java的代碼示例。我不知道如何在Android中使用該API。我提到了thisthis的鏈接,但沒有太多想法。請指導我如何使用這個API與Android應用程序。在Android中使用Google雲端存儲JSON api

+0

你找到了什麼? @ zanky? –

+1

@chelo_c不,我沒有使用「Blobstore」在Google Cloud上存儲圖像。 – zanky

回答

8

好吧,所以我解決了它,並讓我的圖像上傳到雲存儲都很好。 這就是:

注:我使用的XML API幾乎是相同的。

第一個,您需要下載很多庫。 最簡單的方法是創建一個Maven項目並讓它下載所需的所有依賴項。從這個示例項目: Sample Project 的圖書館應該是:

enter image description here

,則必須使用api console 您必須創建一個項目,熟悉雲存儲,創建一個水桶,給桶權限等 您可以找到有關here

更多的細節,一旦你擁有所有這些事情,REA dy是開始編碼的時候了。 比方說,我們要上傳一張圖片: 雲存儲與OAuth協同工作,這意味着您必須是經過身份驗證的用戶才能使用API​​。爲此,最好的方法是授權使用Service Accounts。不要擔心,你需要做的唯一事情是在API控制檯中看到一個服務帳戶這樣的:

enter image description here

我們將使用這個服務帳戶在我們的代碼。

第四,讓我們寫一些代碼,可以說上傳圖片到雲存儲。 對於此代碼的工作,您必須將您在步驟3中生成的密鑰放置在資產文件夾中,我將其命名爲「key.p12」。

我不建議你在生產版本上這樣做,因爲你會發放你的密鑰。

try{ 
httpTransport= new com.google.api.client.http.javanet.NetHttpTransport(); 


//agarro la key y la convierto en un file 
AssetManager am = context.getAssets(); 
InputStream inputStream = am.open("key.p12"); //you should not put the key in assets in prod version. 



//convert key into class File. from inputstream to file. in an aux class. 
File file = UserProfileImageUploadHelper.createFileFromInputStream(inputStream,context); 


//Google Credentianls 
GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport) 
     .setJsonFactory(JSON_FACTORY) 
     .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
     .setServiceAccountScopes(Collections.singleton(STORAGE_SCOPE)) 
     .setServiceAccountPrivateKeyFromP12File(file) 
     .build(); 




String URI = "https://storage.googleapis.com/" + BUCKET_NAME+"/"+imagename+".jpg"; 
HttpRequestFactory requestFactory = httpTransport.createRequestFactory(credential); 


GenericUrl url = new GenericUrl(URI); 




//byte array holds the data, in this case the image i want to upload in bytes. 

HttpContent contentsend = new ByteArrayContent("image/jpeg", byteArray); 


HttpRequest putRequest = requestFactory.buildPutRequest(url, contentsend); 



com.google.api.client.http.HttpResponse response = putRequest.execute(); 
String content = response.parseAsString(); 
Log.d("debug", "response is:"+response.getStatusCode()); 
Log.d("debug", "response content is:"+content);} catch (Exception e) Log.d("debug", "Error in user profile image uploading", e);} 

這會將圖像上傳到您的雲存儲桶。

有關api的更多信息,請查看此鏈接Cloud XML API

+0

如果不是在資產,我應該把生產版p12的密鑰?謝謝 – Cristiana214

+0

@ Cristiana214即時通訊仍然沒有在生產,所以我沒有tjought這一點。但問題是,如果您發出p12密鑰,其他人將能夠訪問api。 –

+0

你可以給所有代碼嗎?我不知道什麼是JSON_FACTORY,STORAGE_SCOPE ...? – tamtoum1987

相關問題