我在最后一个文件完成下载后挂起 Amazon S3 下载时遇到问题,“锁定”文件不被删除,因为它仍然被 java 应用程序“使用”,否则它们工作正常。此外,进度似乎没有正确更新,因为最大的文件只是说 100 一次它的进度,然后继续下载而没有任何进一步的更新,直到它完成,此时它在脚本挂起之前显示“状态:已完成” . 我的代码如下:
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 传输进度示例的示例代码,以创建没有 GUI 的方法的下载版本,所以我很惊讶它甚至可以工作。我对 Java 不是很好,对 AWS API 更差,所以欢迎任何指点。