¿Alguien tiene un ejemplo práctico del uso de Amazon S3 y SimpleDB con Android?

Estoy interesado en cargar datos (imágenes en su mayoría) desde mi aplicación de Android a Amazon S3 y luego almacenar su referencia en un Amazon SimpleDB (con otros datos).

¿Alguien tiene un ejemplo funcional que tome una imagen y algunos datos (texto, etc.) de una aplicación y cargue la imagen en S3 y almacene la referencia a la imagen y los datos en un SimpleDB para su posterior recuperación?

He estado revisando el SDK de Amazon para Android y mirando sus ejemplos y leyendo lo que puedo encontrar sobre el tema, pero parece que no puedo encontrar un buen ejemplo que pueda entender e implementar.

¡Gracias!

Shannon

preguntado el 08 de noviembre de 11 a las 13:11

3 Respuestas

Puede probar este artículo que muestra cómo cargar imágenes en S3 usando el SDK de Amazon Android: http://aws.amazon.com/articles/SDKs/Android/3002109349624271

respondido 15 nov., 11:00

use la siguiente clase para cargar imágenes en el servidor amazon s3 y obtener la cadena URL de la imagen cargada. asegúrese de dar el nombre de región correcto. para identificar el nombre de su región, consulte la siguiente URL

http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

y poner esta dependencia en build.gradle

compile 'com.amazonaws: aws-android-sdk-s3: 2.3.1'

import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;

import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.ResponseHeaderOverrides;    
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;


public class UploadImageToAmazonServer extends AsyncTask<String, Integer, String> {

    private Context mContext;
    private String selectImages = "";
    private String imageName;
    ArrayList<File> imagesArray;
    WebServiceInterface<String, String> mInterface;

    public UploadImageToAmazonServer(Context context, String imageName, ArrayList<File> imagesArray) {

        mContext = context;
        this.imageName = imageName;
        this.imagesArray = imagesArray;
    }

    public void result(WebServiceInterface<String, String> myInterface) {
        this.mInterface = myInterface;
    }

    @Override
    protected String doInBackground(String... params) {
        URL url = null;

        AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials(Constants.Access_Key, Constants.Secret_Access_Key));
s3Client.setRegion(Region.getRegion(Regions.AP_SOUTH_1));
     //   s3Client.setEndpoint("ap-south-1");
        for (int i = 0; i < imagesArray.size(); i++) {
            try {
                String imagePath =  imageName;
                PutObjectRequest por = new PutObjectRequest("bucketname/foldername", imagePath, imagesArray.get(i));
                s3Client.putObject(por);
                ResponseHeaderOverrides override = new ResponseHeaderOverrides();
                override.setContentType("image/jpeg");
                //publishProgress(30);
                GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest("bucketname/foldername", imagePath);
                urlRequest.setExpiration(new Date(System.currentTimeMillis() + 3600000));  // Added an hour's worth of milliseconds to the current time.
                urlRequest.setResponseHeaders(override);
                url=s3Client.generatePresignedUrl(urlRequest);
                if (i != imagesArray.size() - 1) {
                    selectImages = selectImages + url + "|";
                } else {
                    selectImages = selectImages + url;
                }

            } catch (com.amazonaws.AmazonClientException amazonExp) {
                Log.d("setImageSync", amazonExp.getLocalizedMessage());
            }
        }
        return selectImages;
    }


    @Override
    protected void onPostExecute(String result) {
        //   Utils.hideDialog();
        //progressBar.setVisibility(View.GONE);
        Utility.hideProgressBar();
        mInterface.success(this.selectImages);
    }


    @Override
    protected void onPreExecute() {
        Utility.showProgressDialog(mContext);
    }


    @Override
    protected void onProgressUpdate(Integer... vaIntegers) {
//        progressBar.setProgress(vaIntegers[0]);

    }

    public interface WebServiceInterface<E, R> {
        public void success(E reslut);

        public void error(R Error);
    }
}

Si tiene más imágenes, busque servicio en lugar de AsycTask

Respondido el 23 de Septiembre de 16 a las 21:09

  1. Por favor, descargue Explorador de cubos y SDExplorer. Bucket Explorer es la herramienta para Amazon s3 y SDB Explorer es la herramienta para Amazon SimpleDB. Se pueden descargar gratis durante 30 días.
  2. Trate de subir imagen uisng Bucket Explorer.
  3. Trate de Genere la URL web de una imagen cargada de múltiples tiras con un solo clic.
  4. Copie todas las URL al panel de texto en el sistema de archivos local y guarde el archivo como csv.
  5. Ejecute SDB Explorer y Importar datos de CSV.

Para más referencia -

  1. http://www.sdbexplorer.com/documentation/simpledb--more-simpledbexplorer-product-manual-detail.html
  2. http://www.bucketexplorer.com/documentation/amazon-s3--more-product-manual-detail.html
  3. http://gallery.bucketexplorer.com/
  4. http://gallery.sdbexplorer.com/

respondido 11 nov., 11:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.