このトピックでは、AndroidでオブジェクトをOSSにアップロードする方法について説明します。
簡易アップロード
簡易アップロードでは、PutObject操作を使用して、選択したオブジェクトを一度にOSSにアップロードします。 詳細は、OSS APIリファレンスの「PutObject」をご参照ください。
- 処理ロジック
- [アップロード] を選択した後、ロードするローカルファイルを選択できます。
- OssDemoはsts_serverのアドレスを取得した後にリクエストを送信します。
- sts_serverは、AccessKeyId、AccessKeySecret、SecurityToken、およびExpirationを返します。
- 情報を取得した後、OssDemoはSDKを呼び出してOSSClientを作成し、簡単なアップロードを実行します。
- コード分析
- Buttonコントロールを生成します。
場所: res/layout/content_main.xml 内容: <Button style="? android:attr/buttonStyleSmall" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@ string/upload" android:id="@ + id/upload" />
- [アップロード] をクリックします。 アップロードするオブジェクトを選択します。
関数実装のコードセグメント:
Button upload = (Button) findViewById(R.id.upload); upload.setOnClickListener(new View.OnClickListener() { @オーバーライド public void onClick(View v) { Intent i = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, RESULT_UPLOAD_IMAGE); } }
- SDKのアップロードAPI操作を呼び出します。
関数実装のコードセグメント:
@ オーバーライド protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if ((requestCode == RESULT_UPLOAD_IMAGE | | requestCode === RESULT_PAUSEABLEUPLOAD_IMAGE) && resultCode == RESULT_OK && null != data) { Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); Log.d("PickPicture", picturePath); cursor.close(); try { Bitmap bm = ImageDisplayer.autoResizeFromLocalFile(picturePath); displayImage(bm); File file = new File(picturePath); displayInfo("object: " + picturePath + "\nsize: " + String.valueOf(file.length())); } catch (IOException e) { e.printStackTrace(); displayInfo(e.toString()); } // さまざまな操作に基づいてオブジェクトをアップロードします。 if (requestCode == RESULT_UPLOAD_IMAGE) { final EditText editText = (EditText) findViewById(R.id.edit_text); String objectName = editText.getText().toString(); // 単純なアップロード操作を呼び出して、オブジェクトをアップロードします。 ossService.asyncPutImage(objectName, picturePath, getPutCallback(), new ProgressCallbackFactory<PutObjectRequest>().get()); } } }
ここでは、アップロード結果の処理を省略する。 詳細については、ソースコードのonSuccessとonFailureを参照してください。
- Buttonコントロールを生成します。
マルチパートアップロードベースの再開可能アップロード
OSSのMultipartUpload操作を呼び出して、再開可能なアップロードを実装できます。
- 処理ロジック
- [アップロード] を選択した後、ロードするローカルファイルを選択できます。
- OssDemoはsts_serverのアドレスを取得した後にリクエストを送信します。
- sts_serverは、AccessKeyId、AccessKeySecret、SecurityToken、およびExpirationを返します。
- 情報を取得した後、OssDemoはSDKを呼び出してOSSClientを作成し、マルチパートアップロードを実行します。
- [一時停止] をクリックします。 マルチパートアップロードタスクが完了していない場合は、[続行] をクリックして、最後のアップロードが停止した位置からアップロードを再開します。
- コード分析
- Buttonコントロールを生成します。
場所: res/layout/content_main.xml 内容: <Button style="? android:attr/buttonStyleSmall" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/multipart_upload" android:id="@ + id/multipart_upload" />
- [アップロード] をクリックします。 アップロードするオブジェクトを選択します。
関数実装のコードセグメント:
Button multipart_upload = (ボタン) findViewById(R.id.multipart_upload); multipart_upload.setOnClickListener(new View.OnClickListener() { @オーバーライド public void onClick(View v) { // アップロードの同時実行を簡素化するには、再開可能なアップロードタスクを1つだけ実行します。 Intent i = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, RESULT_PAUSEABLEUPLOAD_IMAGE); } } );
- [続行] をクリックして再開可能なアップロードを完了します。
関数実装のコードセグメント:
Upload: // SDKのMultipartUpload操作を呼び出して、オブジェクトをアップロードします。 task = ossService.asyncMultiPartUpload(objectName, picturePath, getMultiPartCallback().addCallback(new Runnable()) { @ Override public void run() { pauseTaskStatus = TASK_NONE; multipart_resume.setEnabled(false); multipart_pause.ack}): <; (null; Factory}) multiPartUploadManagerでasyncUploadを使用して再開可能なアップロードを実装します。 // 再開可能なアップロード中に、PauseableUploadTaskを呼び出してタスクを一時停止できます。 public PauseableUploadTask asyncMultiPartUpload(String object, String localFile, @ NonNull final OSSCompletedCallback<PauseableUploadRequest, PauseableUploadResult> userCallback, final OSSProgressCallback<PauseableUpload Request> userProgressCallback) { ifファイル (""; "" "Log."; Oblocalaudable; Nlocalaudファイルの場合 file.exists()) { Log.w("AsyncMultiPartUpload", "FileNotExist"); Log.w("LocalFile", localFile); return null; } Log.d("MultiPartUpload", localFile); PauseableUploadTask task=multiUploadManager. asyncUpload(object、userCallback、userCallback、userCallback) タスク};;
- Buttonコントロールを生成します。