我有多个图像路径(URI / String)如何将它们上传到Amazon S3

时间:2014-06-21 14:28:35

标签: amazon-web-services amazon-s3 android-asynctask

我有多个图片的路径(URI /字符串)。将此值传递给" 。S3PutObjectTask()执行(URI); "我想将所有这些图像上传到Amazon S3。 有人可以帮助我如何传递这些URI以及如何上传多个图像。

android upload image to amazon storage with image path

中发现了类似的日志cat错误

提前致谢

    public class AWSUpload extends Activity {

private AmazonS3Client s3Client = new AmazonS3Client(
        new BasicAWSCredentials(Constants.ACCESS_KEY_ID,
                Constants.SECRET_KEY));

String uri1a, uri2a, uri3a, uri4a;
int i;
private static final int PHOTO_SELECTED = 1;
Button b1;
TextView t1, t2, t3, t4;
ImageView iv1;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.inspectionreport);
    s3Client.setRegion(Region.getRegion(Regions.US_WEST_2));
    Intent gettingURI = getIntent();
    uri1a = gettingURI.getStringExtra("uri1");
    uri2a = gettingURI.getStringExtra("uri2");
    uri3a = gettingURI.getStringExtra("uri3");
    uri4a = gettingURI.getStringExtra("uri4");
    b1 = (Button) findViewById(R.id.button1);
    t1 = (TextView) findViewById(R.id.textView1);
    t2 = (TextView) findViewById(R.id.textView2);
    t3 = (TextView) findViewById(R.id.textView3);
    t4 = (TextView) findViewById(R.id.textView4);
    iv1 = (ImageView) findViewById(R.id.imageView1);

    Uri img1URI = Uri.parse(uri1a);
    Uri img2URI = Uri.parse(uri2a);
    Uri img3URI = Uri.parse(uri3a);
    Uri img4URI = Uri.parse(uri4a);
    t1.setText(uri1a);
    t2.setText(uri2a);
    t3.setText(uri3a);
    t4.setText(uri4a);

    b1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            for (i = 1; i <= 4; i++) {
                if (i == 1) {
                    Uri selectedImage1 = Uri.parse(uri1a);
                    new S3PutObjectTask().execute(selectedImage1);
                } else if (i == 2) {
                    Uri selectedImage2 = Uri.parse(uri2a);
                    new S3PutObjectTask().execute(selectedImage2);
                } else if (i == 3) {
                    Uri selectedImage3 = Uri.parse(uri3a);
                    new S3PutObjectTask().execute(selectedImage3);
                } else if (i == 4) {
                    Uri selectedImage4 = Uri.parse(uri4a);
                    new S3PutObjectTask().execute(selectedImage4);
                } else {
                    Intent returnIntent = new Intent(AWSUpload.this,
                            ProductImagesss.class);
                    startActivity(returnIntent);
                }

            }

        }
    });


}

// This method is automatically called by the image picker when an image is
// selected.
protected void onActivityResult(int requestCode, int resultCode,
        Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

    switch (requestCode) {
    case PHOTO_SELECTED:
        if (resultCode == RESULT_OK) {

            Uri selectedImage = imageReturnedIntent.getData();
            new S3PutObjectTask().execute(selectedImage);
        }
    }
}

// Display an Alert message for an error or failure.
protected void displayAlert(String title, String message) {

    AlertDialog.Builder confirm = new AlertDialog.Builder(this);
    confirm.setTitle(title);
    confirm.setMessage(message);

    confirm.setNegativeButton(AWSUpload.this.getString(R.string.ok),
            new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {

                    dialog.dismiss();
                }
            });

    confirm.show().show();
}

protected void displayErrorAlert(String title, String message) {

    AlertDialog.Builder confirm = new AlertDialog.Builder(this);
    confirm.setTitle(title);
    confirm.setMessage(message);

    confirm.setNegativeButton(AWSUpload.this.getString(R.string.ok),
            new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {

                    AWSUpload.this.finish();
                }
            });

    confirm.show().show();
}

private class S3PutObjectTask extends AsyncTask<Uri, Void, S3TaskResult> {

    ProgressDialog dialog;

    protected void onPreExecute() {
        dialog = new ProgressDialog(AWSUpload.this);
        dialog.setMessage(AWSUpload.this.getString(R.string.uploading));
        dialog.setCancelable(false);
        dialog.show();
    }

    protected S3TaskResult doInBackground(Uri... uris) {

        if (uris == null || uris.length != 1) {
            return null;
        }

        // The file location of the image selected.
        Uri selectedImage = uris[0];

        ContentResolver resolver = getContentResolver();
        String fileSizeColumn[] = { OpenableColumns.SIZE };

        Cursor cursor = resolver.query(selectedImage, fileSizeColumn, null,
                null, null);

        cursor.moveToFirst();

        int sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE);
        String size = null;
        if (!cursor.isNull(sizeIndex)) {

            size = cursor.getString(sizeIndex);
        }

        cursor.close();

        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setContentType(resolver.getType(selectedImage));
        if (size != null) {
            metadata.setContentLength(Long.parseLong(size));
        }

        S3TaskResult result = new S3TaskResult();

        // Put the image data into S3.
        try {
            // s3Client.createBucket(Constants.getPictureBucket());

            PutObjectRequest por = new PutObjectRequest("mybucket",
                    Constants.PICTURE_NAME,
                    resolver.openInputStream(selectedImage), metadata);
            s3Client.putObject(por);
        } catch (Exception exception) {

            result.setErrorMessage(exception.getMessage());
        }

        return result;
    }

    protected void onPostExecute(S3TaskResult result) {

        dialog.dismiss();

        if (result.getErrorMessage() != null) {

            displayErrorAlert(
                    AWSUpload.this.getString(R.string.upload_failure_title),
                    result.getErrorMessage());
        }
    }
}

private class S3TaskResult {
    String errorMessage = null;
    Uri uri = null;

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    public Uri getUri() {
        return uri;
    }

    public void setUri(Uri uri) {
        this.uri = uri;
    }
}

}

我的日志猫:

 E/AndroidRuntime(18015): FATAL EXCEPTION: AsyncTask #3
 E/AndroidRuntime(18015): java.lang.RuntimeException: An error occured while executing doInBackground()
 E/AndroidRuntime(18015):   at android.os.AsyncTask$3.done(AsyncTask.java:299)
 E/AndroidRuntime(18015):   at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
 E/AndroidRuntime(18015):   at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
 E/AndroidRuntime(18015):   at java.util.concurrent.FutureTask.run(FutureTask.java:239)
 E/AndroidRuntime(18015):   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
 E/AndroidRuntime(18015):   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
 E/AndroidRuntime(18015):   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
 E/AndroidRuntime(18015):   at java.lang.Thread.run(Thread.java:838)
 E/AndroidRuntime(18015): Caused by: java.lang.NullPointerException
 E/AndroidRuntime(18015):   at com.cbazaarqc.AWSUpload$S3PutObjectTask.doInBackground(AWSUpload.java:229)
 E/AndroidRuntime(18015):   at com.cbazaarqc.AWSUpload$S3PutObjectTask.doInBackground(AWSUpload.java:1)
 E/AndroidRuntime(18015):   at android.os.AsyncTask$2.call(AsyncTask.java:287)
 E/AndroidRuntime(18015):   at java.util.concurrent.FutureTask.run(FutureTask.java:234)
 E/AndroidRuntime(18015):   ... 4 more
 E/WindowManager(18015): Activity com.cbazaarqc.AWSUpload has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{420a16e0 V.E..... R......D 0,0-684,192} that was originally added here
 E/WindowManager(18015): android.view.WindowLeaked: Activity com.cbazaarqc.AWSUpload has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{420a16e0 V.E..... R......D 0,0-684,192} that was originally added here
 E/WindowManager(18015):    at android.view.ViewRootImpl.<init>(ViewRootImpl.java:409)
 E/WindowManager(18015):    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:218)
 E/WindowManager(18015):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
 E/WindowManager(18015):    at android.app.Dialog.show(Dialog.java:281)
 E/WindowManager(18015):    at com.cbazaarqc.AWSUpload$S3PutObjectTask.onPreExecute(AWSUpload.java:211)
 E/WindowManager(18015):    at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
 E/WindowManager(18015):    at android.os.AsyncTask.execute(AsyncTask.java:534)
 E/WindowManager(18015):    at com.cbazaarqc.AWSUpload.onCreate(AWSUpload.java:93)
 E/WindowManager(18015):    at android.app.Activity.performCreate(Activity.java:5122)
 E/WindowManager(18015):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
 E/WindowManager(18015):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
 E/WindowManager(18015):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
 E/WindowManager(18015):    at android.app.ActivityThread.access$600(ActivityThread.java:156)
 E/WindowManager(18015):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
 E/WindowManager(18015):    at android.os.Handler.dispatchMessage(Handler.java:99)
 E/WindowManager(18015):    at android.os.Looper.loop(Looper.java:153)
 E/WindowManager(18015):    at android.app.ActivityThread.main(ActivityThread.java:5297)
 E/WindowManager(18015):    at java.lang.reflect.Method.invokeNative(Native Method)
 E/WindowManager(18015):    at java.lang.reflect.Method.invoke(Method.java:511)
 E/WindowManager(18015):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
 E/WindowManager(18015):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
 E/WindowManager(18015):    at dalvik.system.NativeStart.main(Native Method)

0 个答案:

没有答案