簡易アップロード
簡易アップロードとは、選択したファイルを 1 回限りで OSS にアップロードするため、OSS API の Put Object インターフェイスが呼び出されることを意味します。
- 呼び出しのロジック
- アップロードオプションを選択し、アップロードするファイルを選択します。
- 処理パラメーターが選択されると、OssDemo は受信した sts_server のアドレスに要求を送信します。
- sts_server は、AccessKeyId、AccessKeySecret、SecurityToken、および Expiration を OssDemo に返します。
- 上記の情報を受け取ったら、OssDemo は SDK を呼び出し、OssClient インスタンスを作成し、簡易アップロードを実装します。
- コード
- ボタンコントロールを生成します。
Location: res/layout/content_main.xml Content: <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 upload = (Button) findViewById(R.id.upload); upload.setOnClickListener(new View.OnClickListener() { @Override 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 のアップロードインターフェイスを呼び出します。
機能実装のスニペット
@Override 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("file: " + picturePath + "\nsize: " + String.valueOf(file.length())); } } catch(IOException e){ e.printStackTrace(); displayInfo(e.toString()); } //Perform simple upload or resumable upload based on the specified operation. if (requestCode == RESULT_UPLOAD_IMAGE) { final EditText editText = (EditText) findViewById(R.id.edit_text); String objectName = editText.getText().toString(); //Call the simple upload interface to upload the files. ossService.asyncPutImage(objectName, picturePath, getPutCallback(), new ProgressCallbackFactory<PutObjectRequest>().get()); } } }
アップロード結果の扱い方については、ここでは触れません。 ソースコードに onSuccess と onFailure がある可能性があります。
- ボタンコントロールを生成します。
マルチパートアップロードに基づく再開可能なアップロード
再開可能なアップロード効果を実現するには、OSS API のマルチパートアップロードインターフェイスを呼び出します。
呼び出しのロジック
- アップロードオプションを選択し、アップロードするファイルを選択します。
- 処理パラメータが選択されると、OssDemo は OssDemo が受信した sts_server のアドレスに要求を送信します。
- sts_server は、AccessKeyId、AccessKeySecret、SecurityToken、および Expiration を OssDemo に返します。
- 上記の情報を受け取ったら、OssDemo は SDK を呼び出し、OssClient インスタンスを作成し、マルチパートアップロードを実装します。
- [一時停止] をクリックしたのに、マルチパートアップロードプロセスがまだ進行中の場合は、[続行] をクリックし、残りのパートのアップロードを続行します。 これにより再開可能なアップロード効果が得られます。
コード
- ボタンコントロールを生成します。
Location: res/layout/content_main.xml Content: <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 = (Button) findViewById(R.id.multipart_upload); multipart_upload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //To make it simple, only one resumable upload task is running. Intent i = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, RESULT_PAUSEABLEUPLOAD_IMAGE); } } );
- 残りのパーツの再開可能なアップロードのため、[アップロード] をクリックしてください。
機能実装のスニペット
Click "Upload": //The multipart upload interface of the SDK is called. task = ossService.asyncMultiPartUpload(objectName, picturePath, getMultiPartCallback().addCallback(new Runnable() { @Override public void run() { pauseTaskStatus = TASK_NONE; multipart_resume.setEnabled(false); multipart_pause.setEnabled(false); task = null; } }}, new ProgressCallbackFactory<PauseableUploadRequest>().get()); From the encapsulating logic for the SDK at the underlying layer, we can see that resumable upload is implemented by asyncUpload in the multiPartUploadManager. //During resumable upload, the returned task can be used to pause the task. public PauseableUploadTask asyncMultiPartUpload(String object, String localFile, @NonNull final OSSCompletedCallback<PauseableUploadRequest, PauseableUploadResult> userCallback, final OSSProgressCallback<PauseableUploadRequest> userProgressCallback) { if (object.equals("")) { Log.w("AsyncMultiPartUpload", "ObjectNull"); return null; } File file = new File(localFile); if (!file.exists()) { Log.w("AsyncMultiPartUpload", "FileNotExist"); Log.w("LocalFile", localFile); return null; } Log.d("MultiPartUpload", localFile); PauseableUploadTask task = multiPartUploadManager.asyncUpload(object, localFile, userCallback, userProgressCallback); return task; }