7

Amazon S3 Android ライブラリを使用して、カメラで写真を撮って得た画像をアップロードしようとして問題が発生しました。

画像を保存するには

File _photoFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),   (cal.getTimeInMillis() + ".jpg"));

            try {
                if (_photoFile.exists() == false) {
                    _photoFile.getParentFile().mkdirs();
                    _photoFile.createNewFile();
                }

            } catch (IOException e) {
                // Log.e(TAG, "Could not create file.", e);
            }
            // Log.i(TAG, path);

            filePath = Uri.fromFile(_photoFile);
            Intent cameraIntent = new Intent(
                    android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, filePath);
            startActivityForResult(cameraIntent, 1);

filePath を使用して画像をアップロードするには:

try {
            s3Client.createBucket(Constants.getPictureBucket());

            // Content type is determined by file extension.
            PutObjectRequest por = new PutObjectRequest(
                    Constants.getPictureBucket(), Constants.PICTURE_NAME,
                    new java.io.File(filePath));
            s3Client.putObject(por);
        } catch (Exception exception) {

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

エラーが発生し続けますUnable to calclualte MD5 hash:/file:/storage/sdcard0/DCIM/13161272646580.jpg open failed:ENOENT (No such file or directory)

しかし、SDカードのディレクトリを参照すると、そこに写真があり(写真が作成されています)、関連する権限を作成しました。

4

2 に答える 2

2

問題は ファイル パスにあります。そのような方法を使用して、実パスを取得します。

onActivityResult() から画像を取得する場合、例を挙げます。画像の Uri を取得できる onActivityResult(int requestCode, int resultCode, Intent data) が必要です。

uri uri = data.getData();

次に、それを使用して Uri から実際のパスを取得し、これを PutObjectRequest(BUCKET_NAME, IMAGE_NAME, REAL_PATH); に渡します。

public String getRealPathFromURI(Context context, Uri contentUri) {
    Cursor cursor = null;
    try {
        String[] proj = { MediaStore.Images.Media.DATA };
        cursor = context.getContentResolver().query(contentUri,  proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}

私は同じ問題を抱えていましたが、これで解決しました。それが役に立てば幸い!

于 2014-09-17T07:15:19.007 に答える