簡易アップロード

簡易アップロードとは、選択したファイルを 1 回限りで OSS にアップロードするため、OSS API の Put Object インターフェイスが呼び出されることを意味します。

  • 呼び出しのロジック
    1. アップロードオプションを選択し、アップロードするファイルを選択します。
    2. 処理パラメーターが選択されると、OssDemo は受信した sts_server のアドレスに要求を送信します。
    3. sts_server は、AccessKeyId、AccessKeySecret、SecurityToken、および Expiration を OssDemo に返します。
    4. 上記の情報を受け取ったら、OssDemo は SDK を呼び出し、OssClient インスタンスを作成し、簡易アップロードを実装します。
  • コード
    1. ボタンコントロールを生成します。
       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" />
    2. [アップロード] をクリックしてアップロードするファイルを選択します。

      機能実装のスニペット

       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);
           }
       }
    3. 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 のマルチパートアップロードインターフェイスを呼び出します。

呼び出しのロジック
  1. アップロードオプションを選択し、アップロードするファイルを選択します。
  2. 処理パラメータが選択されると、OssDemo は OssDemo が受信した sts_server のアドレスに要求を送信します。
  3. sts_server は、AccessKeyId、AccessKeySecret、SecurityToken、および Expiration を OssDemo に返します。
  4. 上記の情報を受け取ったら、OssDemo は SDK を呼び出し、OssClient インスタンスを作成し、マルチパートアップロードを実装します。
  5. [一時停止] をクリックしたのに、マルチパートアップロードプロセスがまだ進行中の場合は、[続行] をクリックし、残りのパートのアップロードを続行します。 これにより再開可能なアップロード効果が得られます。
コード
  1. ボタンコントロールを生成します。
    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" />
  2. [アップロード] をクリックし、アップロードするファイルを選択します。

    機能実装のスニペット

    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);
         }
     }
     );
  3. 残りのパーツの再開可能なアップロードのため、[アップロード] をクリックしてください。

    機能実装のスニペット

     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;
     }