AWS SDKには、File
データをバケットにアップロードするためのオブジェクトが必要です。に必要なFileオブジェクトの作成に問題がありますtransferUtility.upload
。私はnew File(selectedImageUri.getPath())
動作しないことを知っています。URIからファイルを作成する方法について読んでみましたが、簡単な方法はないようです。私は他のものを使うべきTransferUtility
ですか?
public class SettingsActivity extends AppCompatActivity {
...
private class ChangeSettingsTask extends AsyncTask<Void, Void, Boolean> {
public void uploadData(File image) {
TransferUtility transferUtility =
TransferUtility.builder()
.defaultBucket("some-bucket")
.context(getApplicationContext())
.s3Client(new AmazonS3Client( new BasicAWSCredentials( "something", "something") ))
.build();
TransferObserver uploadObserver =
transferUtility.upload("somefile.jpg", image);
...
}
@Override
protected void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
if (resultCode == RESULT_OK) {
Uri selectedImageUri = data.getData();
uploadData(new File(selectedImageUri.getPath()));
}
}
}
S3TransferUtilitySampleアプリからこの関数を使用して、URIのファイルパスを取得できます。
private String getPath(Uri uri) throws URISyntaxException {
final boolean needToCheckUri = Build.VERSION.SDK_INT >= 19;
String selection = null;
String[] selectionArgs = null;
// Uri is different in versions after KITKAT (Android 4.4), we need to
// deal with different Uris.
if (needToCheckUri && DocumentsContract.isDocumentUri(getApplicationContext(), uri)) {
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
return Environment.getExternalStorageDirectory() + "/" + split[1];
} else if (isDownloadsDocument(uri)) {
final String id = DocumentsContract.getDocumentId(uri);
uri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
} else if (isMediaDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("image".equals(type)) {
uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
selection = "_id=?";
selectionArgs = new String[] {
split[1]
};
}
}
if ("content".equalsIgnoreCase(uri.getScheme())) {
String[] projection = {
MediaStore.Images.Media.DATA
};
Cursor cursor = null;
try {
cursor = getContentResolver()
.query(uri, projection, selection, selectionArgs, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.moveToFirst()) {
return cursor.getString(column_index);
}
} catch (Exception e) {
}
} else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}
これで、filePathができたら、そこからファイルオブジェクトを作成できます。
File file = new File(filePath);
TransferObserver observer = transferUtility.upload(Constants.BUCKET_NAME, file.getName(),
file);
詳細については、サンプルを試すことができます:https://github.com/awslabs/aws-sdk-android-samples/tree/master/S3TransferUtilitySample
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加