tamtoum1987
tamtoum1987

Reputation: 2057

upload image to google cloud storage with an application android

I'm trying to upload an image to google cloud storage.
I found an example like this https://github.com/pliablematter/simple-cloud-storage that explains how to do that.
I created a project bucket, etc., but when I try to create a client id I get this error:

An error has occurred. Please retry laterenter image description here

Where did this error come from?
Maybe there is another method to upload file to the google cloud storage with an android application?

EDIT____________ in the new console I can see a message telling me only owner of the project can create clients for the application web and account services. So error is caused because I connect with a account collaborator

enter image description here EDIT__________ Now I can create client id, but I don't know how I can upload file from android to bucket, I read this https://github.com/pliablematter/simple-cloud-storage but it is for java not Android, anyone has an example how can I do that ?

Any help will be appreciated

Upvotes: 3

Views: 5503

Answers (2)

Jaba
Jaba

Reputation: 59

public class RetrieveFeedTask extends AsyncTask<Void, Void, String> {

    private Exception exception;

    protected String doInBackground(Void... params) {

        JsonFactory jsonFactory = new JacksonFactory();

        try {
            List<String> scopes = new ArrayList<String>();

            scopes.add(StorageScopes.DEVSTORAGE_FULL_CONTROL);
            HttpTransport httpTransport = new com.google.api.client.http.javanet.NetHttpTransport();

            //convert key into class File. from inputstream to file. in an aux class.
            File file =getTempPkc12File();


            //Google Credentianls
            GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
                    .setJsonFactory(jsonFactory)
                    .setServiceAccountId("[email protected]")
                    .setServiceAccountScopes((scopes))
                    .setServiceAccountPrivateKeyFromP12File(file)
                    .build();




            String URI = "https://storage.googleapis.com/" + GOOGLE_STORAGE_BUCKET+"/images/"+createImageFile();
            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.

            Resources res = getResources();
            Drawable drawable = res.getDrawable(R.drawable.camera);
            Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            byte[] bitMapData = stream.toByteArray();


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


            HttpRequest putRequest;

            putRequest = requestFactory.buildPutRequest(url, contentsend);




            com.google.api.client.http.HttpResponse response = putRequest.execute();
            String content = response.parseAsString();
            Log.i("debug", "response is:"+response.getStatusCode());
            Log.i("debug", "response content is:"+content);
        } catch (IOException | GeneralSecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Log.i("ErrorUpload",""+e.toString());
        }
        return "";

    }

    protected void onPostExecute(String feed) {
        int i  = 0;
        int j = i;
        // TODO: check this.exception
        // TODO: do something with the feed
        Log.i("OnPost",""+feed);
    }
}


private  File getTempPkc12File() throws IOException {
    // xxx.p12 export from google API console
    InputStream pkc12Stream = (NewProduceInfo.this).getResources().getAssets().open("xxxxx-xxxxxxx-xxxxxx.p12");
    File tempPkc12File = File.createTempFile("temp_pkc12_file", "p12");
    OutputStream tempFileStream = new FileOutputStream(tempPkc12File);
    int read = 0;
    byte[] bytes = new byte[1024];
    while ((read = pkc12Stream.read(bytes)) != -1) {
        tempFileStream.write(bytes, 0, read);
    }
    return tempPkc12File;
}
  1. Blockquote

Upvotes: 0

tamtoum1987
tamtoum1987

Reputation: 2057

I can finally upload images on google storage like this

  class RetrieveFeedTask extends AsyncTask<Void, Void, String> {

    private Exception exception;

    protected String doInBackground(Void... params) {

        try {
            List<String> scopes = new ArrayList<String>();
            scopes.add(StorageScopes.DEVSTORAGE_FULL_CONTROL);
              httpTransport= new com.google.api.client.http.javanet.NetHttpTransport();


              //agarro la key y la convierto en un file
              AssetManager am = getAssets();
              String STORAGE_SCOPE = "https://www.google.com/analytics/feeds/" ;
              InputStream inputStream = am.open("*********114db0.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 =stream2file(inputStream);


              //Google Credentianls
              GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
                      .setJsonFactory(JSON_FACTORY)
                      .setServiceAccountId("**********[email protected]")
                      .setServiceAccountScopes((scopes))
                      .setServiceAccountPrivateKeyFromP12File(file)
                      .build();




              String URI = "https://storage.googleapis.com/" + "BUCKET_NAME"+"/"+"zzzzz3"+".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.

              Resources res = getResources();
              Drawable drawable = res.getDrawable(R.drawable.camera);
              Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
              ByteArrayOutputStream stream = new ByteArrayOutputStream();
              bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
              byte[] bitMapData = stream.toByteArray();


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


              HttpRequest putRequest;

                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 (IOException | GeneralSecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        return "";

    }

    protected void onPostExecute(String feed) {
        int i  = 0;
        int j = i;
        // TODO: check this.exception 
        // TODO: do something with the feed
    }
}

Don't forget to download jar and put it on lib folder: - com.fasterxml.jackson.core.jar - google-api-client-1.20.0.jar - google-api-services-storage-v1beta2-rev21-1.15.0-rc.jar - google-http-client-1.20.0.jar - google-http-client-jackson2-1.20.0.jar - google-http-client-jdo-1.20.0.jar - google-oauth-client-1.20.0.jar

Upvotes: 4

Related Questions