Google Cloud Storageに複数のファイルをアップロードしたいと考えています。現在、Google Java APIを使用して1つずつアップロードしています。コードは以下のとおりです。
public void uploadFile(File srcFile,String bucketName, String destPath) throws IOException {
BlobId blobId = BlobId.of(bucketName, srcFile.getName());
BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build();
long startTime = System.currentTimeMillis();
// Blob blob = storage.create(blobInfo,new FileInputStream(srcFile));
try (WriteChannel writer = storage.writer(blobInfo)) {
try (FileInputStream in = new FileInputStream(srcFile)){
byte[] buffer = new byte[1024 * 1024 * 100] ;
writer.setChunkSize(buffer.length);
int readSize = 0;
while((readSize = in.read(buffer)) > 0) {
writer.write(ByteBuffer.wrap(buffer, 0, readSize));
}
long endTime = System.currentTimeMillis();
double writeTime = (double)(endTime - startTime) / 1000;
System.out.println("File write time : " + writeTime);
}
}
}
このアプリケーションでは、一度に複数のファイルをアップロードしたいと考えています。Java APIで複数のファイルをアップロードするメソッドを見つけようとしましたが、1回の呼び出しで複数のファイルをアップロードするメソッドが見つかりませんでした。
複数の呼び出しを使用してループとアップロードを行うと、巨大なネットワークオーバーヘッドが追加され、パフォーマンスが非常に遅くなるため、アプリケーションには余裕がありません。
私の質問は:
google-cloud-javaライブラリも、基盤となるJSON APIも、複数のファイルをアップロードするためのAPI呼び出しを備えていませんが、複数のスレッドを生成し、各スレッドにファイルをアップロードさせることで、意図したことを実現できます。gsutil -mオプションは、この方法で行います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加