edit-icon download-icon

ファイル操作

最終更新日: Sep 14, 2016

OSS Android SDK では、ファイルの操作は ‘OSSFile’ で収集されます。これは通常、’OSSData’ と同じ方法で使用されます。実際、重要な違いは、’OSSData’ はメモリ内のデータの取得に使用できるのに対し、’OSSFile’ は端末でローカルファイルを直接アップロードしたり、OSS データをローカルファイルにダウンロードするために使用する点です。

アップロードファイルが大きくて長い時間がかかる場合、アップロードの失敗のために処理中に例外が発生する可能性があります。そのため、OSS Android SDK には大きいファイルのアップロードのためのブレークポイント再開インターフェイスがあります。

1. ファイルへのダウンロード

ファイルダウンロード操作はデータダウンロード操作と似ています。唯一の違いは、ダウンロードの間にダウンロード先のファイルパスを指定する必要があることです。ダウンロードメソッドはデータを返しません。

  1. OSSFile ossFile = ossService.getOssFile(sampleBucket, "sample-data");
  2. ossFile.downloadTo("/path/to/file"); // Failed downloads will throw an exception

非同期バージョン:

  1. ossFile.downloadToInBackground("/path/to/file", new GetFileCallback() {
  2. @Override
  3. public void onSuccess(String objectKey, String filePath) {
  4. }
  5. @Override
  6. public void onProgress(String objectKey, int byteCount, int totalSize) {
  7. }
  8. @Override
  9. public void onFailure(String objectKey, OSSException ossException) {
  10. }
  11. });

非同期インターフェイスの ‘onSuccess’ コールバックメソッドには byte[] 配列パラメーターがありません。これは、ダウンロードが成功した後でファイル保存パスに置き換えられます。

3. ファイル入力ストリームの取得

同様に、オブジェクトをダウンロードするときは、入力ストリームを直接取得して必要な処理を実行することもできます。

  1. OSSFile ossFile = ossService.getOssFile(sampleBucket, "sample-data"); // Constructs an OSSFile instance
  2. try {
  3. InputStream inputStream = ossFile.getObjectInputStream(); // A failed retrieval will throw an exception
  4. // do something with inputStream
  5. } catch (OSSException ossException) {
  6. }

3. ファイルからのアップロード

ファイルからのアップロードインターフェイスも変更されています。アップロードする前に、アップロードファイルのパスを指定する必要があります。

  1. OSSFile ossFile = ossService.getOssFile(sampleBucket, "sample-data");
  2. ossFile.setUploadFilePath("/path/to/file", "content type"); // Specifies the path of the file to be uploaded and the file content type. If the file does not exist, the system will throw an exception
  3. ossFile.enableUploadCheckMd5sum(); // Enables the upload MD5 check
  4. ossFile.upload(); // Failed uploads will throw an exception

非同期バージョン:

  1. ossFile.uploadInBackground(new SaveCallback() {
  2. @Override
  3. public void onSuccess(String objectKey) {
  4. }
  5. @Override
  6. public void onProgress(String objectKey, int byteCount, int totalSize) {
  7. }
  8. @Override
  9. public void onFailure(String objectKey, OSSException ossException) {
  10. }
  11. });

4. その他の一般的な操作

‘OSSFile’ と ‘OSSData’ の違いについては、前の 2 つのセクションで既に説明しました。どちらも OSS に格納されるデータセグメントであるため、OSS の観点からは両者に違いはありません。したがって、データ形式に関するアップロード/ダウンロードインターフェイスの違いを除き、他のインターフェイスの使用方法は同じです。これには、コピー、削除、ダウンロード範囲の指定、カスタムメタ属性の追加、URL の生成、ジョブのキャンセルが含まれます

したがって、これらについてはここでは説明しません。

5. ブレークポイントダウンロード

大きいファイルのダウンロードには時間がかかるため、処理が失敗するリスクが高くなります。そのため、OSS Android SDK にはブレークポイントダウンロードインターフェイスがあります。このインターフェイスを使用してファイルをダウンロードすると、なんらかの理由でダウンロードが途中で失敗した場合でも、ファイル保存パスを変更することなく、次のダウンロードで同じ ‘OSSbucket’ と ‘ObjectKey’ を指定できます。その場合、次のダウンロードは、前のダウンロードが失敗した場所から続行されます。

同時に、このインターフェイスを呼び出すと、タスクの ‘handler’ が返されます。ダウンロード処理の間にこの ‘handler’ を使用して、いつでもダウンロードタスクをキャンセルできます。失敗したタスクは、’onFailure()’ ロジックに移行します。

このインターフェイスは非同期バージョンのみです。次にサンプルコードを示します。

  1. OSSFile ossFile = ossService.getOssFile(sampleBucket, "test.jpg");
  2. TaskHandler tk = ossFile.ResumableDownloadToInBackground("/path/to/file", new GetFileCallback() {
  3. @Override
  4. public void onSuccess(String objectKey, String filePath) {
  5. // TODO Auto-generated method stub
  6. }
  7. @Override
  8. public void onProgress(String objectKey, int byteCount, int totalSize) {
  9. // TODO Auto-generated method stub
  10. }
  11. @Override
  12. public void onFailure(String objectKey, OSSException ossException) {
  13. // TODO Auto-generated method stub
  14. }
  15. });
  16. tk.cancel(); // During the download task execution, you can discard the download at any time

ブレークポイントダウンロードについては、記録されるファイルのストレージパス、同時スレッドの最大数、自動再試行回数など、いくつかの設定を指定できます。これらのオプションを設定しないと、デフォルト値が使用されます。

  1. OSSFile ossFile = ossService.getOssFile(sampleBucket, "test.jpg");
  2. ResumableTaskOption option = new ResumableTaskOption();
  3. option.setThreadNum(2); // Default: 3, maximum: 5
  4. option.setRecordFileDirectory("record/file/dir"); // Stored in the application data directory by default
  5. option.setAutoRetryTime(1); // Default: 2, maximum: 3
  6. TaskHandler tk = ossFile.ResumableDownloadToInBackground("/path/to/file", option, new GetFileCallback() {
  7. @Override
  8. public void onSuccess(String objectKey, String filePath) {
  9. // TODO Auto-generated method stub
  10. }
  11. @Override
  12. public void onProgress(String objectKey, int byteCount, int totalSize) {
  13. // TODO Auto-generated method stub
  14. }
  15. @Override
  16. public void onFailure(String objectKey, OSSException ossException) {
  17. // TODO Auto-generated method stub
  18. }
  19. });

6. ブレークポイントからの再開

同様に、OSS Android SDK にはブレークポイント再開インターフェイスもあります。このインターフェイスを使用してファイルをアップロードすると、なんらかの理由でアップロードが途中で失敗した場合でも、アップロードするファイルを変更することなく、次のアップロードで同じ ‘OSSbucket’ と ‘ObjectKey’ を指定できます。その場合、次のアップロードは、前のアップロードが失敗した場所から続行されます。

同時に、このインターフェイスを呼び出すと、タスクの ‘handler’ が返されます。アップロード処理の間にこの ‘handler’ を使用して、いつでもアップロードタスクをキャンセルできます。失敗したタスクは、’onFailure()’ ロジックに移行します。

このインターフェイスは非同期バージョンのみです。次にサンプルコードを示します。

  1. OSSFile ossFile = ossService.getOssFile(sampleBucket, "large.data");
  2. ossFile.setUploadFilePath("/path/to/file", "file content type"); // Specifies the path of the file to be uploaded and the file content type
  3. TaskHandler tk = ossFile.ResumableUploadInBackground(new SaveCallback() {
  4. @Override
  5. public void onSuccess(String objectKey) {
  6. // TODO Auto-generated method stub
  7. }
  8. @Override
  9. public void onProgress(String objectKey, int byteCount, int totalSize) {
  10. // TODO Auto-generated method stub
  11. }
  12. @Override
  13. public void onFailure(String objectKey, OSSException ossException) {
  14. // TODO Auto-generated method stub
  15. }
  16. });
  17. tk.cancel(); // During the upload task execution, you can discard the upload at any time

ブレークポイント再開タスクについても、いくつかの設定を指定できます。これらの設定は、前の章のブレークポイントダウンロードと同じです。

  1. OSSFile ossFile = ossService.getOssFile(sampleBucket, "test.jpg");
  2. ResumableTaskOption option = new ResumableTaskOption();
  3. option.setThreadNum(2); // Default: 3, maximum: 5
  4. option.setRecordFileDirectory("record/file/dir"); // Stored in the application data directory by default
  5. option.setAutoRetryTime(1); // Default: 2, maximum: 3
  6. TaskHandler tk = ossFile.ResumableUploadInBackground(option, new SaveCallback() {
  7. @Override
  8. public void onSuccess(String objectKey) {
  9. // TODO Auto-generated method stub
  10. }
  11. @Override
  12. public void onProgress(String objectKey, int byteCount, int totalSize) {
  13. // TODO Auto-generated method stub
  14. }
  15. @Override
  16. public void onFailure(String objectKey, OSSException ossException) {
  17. // TODO Auto-generated method stub
  18. }
  19. });