我在上一个文件完成下载后挂起了亚马逊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 Transfer Progress Sample的示例代码,以便在没有GUI的情况下创建该方法的下载版本,所以我很惊讶它甚至可以工作。我对Java不是很了不起,对AWS API来说更糟糕,所以任何指针都是受欢迎的。
答案 0 :(得分:0)
我找到了挂起问题的解决方案。显然 tx =新的TransferManager(凭据); 应该是 tx =新的AmazonS3Client(凭据); 。我不确定转移管理器是如何工作的,但我认为它挂起的原因是它在完成连接时没有关闭连接,但是#&#'s&#'s's's's's's's's's's's 39;可能是另一个话题......