upload image to google cloud storage with an application android

前端 未结 2 1703
面向向阳花
面向向阳花 2020-12-10 09:16

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.<

相关标签:
2条回答
  • 2020-12-10 09:52
    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("xxxxxx-xxxx-xxx@xxxxx-xxxxxx.iam.gserviceaccount.com")
                        .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
    0 讨论(0)
  • 2020-12-10 09:54

    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("**********ic1bgevf3h@developer.gserviceaccount.com")
                          .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

    0 讨论(0)
提交回复
热议问题