最後のファイルのダウンロードが完了した後に Amazon S3 のダウンロードがハングするという問題があり、Java アプリによってまだ「使用中」であるため、ファイルが削除されないように「ロック」します。それ以外の場合は正常に動作します。さらに、進行状況が正しく更新されていないように見えます。最大のファイルは進行状況に対して 100 を 1 回だけ表示し、完了するまでそれ以上更新せずにダウンロードを続行します。完了した時点で、スクリプトがハングする前に「状態: 完了」と表示されます。 . 私のコードは以下の通りです:
private static void getTheS3File(String bucketName, String file, String projID, String fileType) throws Exception {
ProgressListener progressListener = new ProgressListener() {
int lastProg = 0;
public void progressChanged(ProgressEvent progressEvent) {
if (download == null) return;
int curProg = (int)download.getProgress().getPercentTransfered();
if(curProg != lastProg) {
System.out.println(curProg);
lastProg = curProg;
}
switch (progressEvent.getEventCode()) {
case ProgressEvent.COMPLETED_EVENT_CODE:
System.out.println("State: " + download.getState());
break;
case ProgressEvent.FAILED_EVENT_CODE:
try {
AmazonClientException e = download.waitForException();
System.out.printf("Unable to download file from Amazon S3: " + e.getMessage(), "Error Downloading File", JOptionPane.ERROR_MESSAGE);
} catch (InterruptedException e) {}
break;
}
}
};
File newFile = null;
GetObjectRequest request = new GetObjectRequest(bucketName, file).withProgressListener(progressListener);
if(fileType == "img") {
newFile = new File("/c:/test/" + projID + "/original.jpg");
} else if(fileType == "txt") {
newFile = new File("/c:/test/" + projID + "/test.txt");
}
download = tx.download(request,newFile);
//System.out.println("progress: " + download.getProgress().getPercentTransfered() + " State: " + download.getState());
}
SDK に付属している Amazon S3 Transfer Progress Sample のサンプル コードをかなり分解して、GUI なしでメソッドのダウンロード バージョンを作成したので、それが機能することにも驚いています。私は Java が苦手で、AWS API はさらに苦手なので、何かアドバイスをいただければ幸いです。