0

我在最后一个文件完成下载后挂起 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 更差,所以欢迎任何指点。

4

1 回答 1

0

我找到了解决挂起问题的方法。显然tx = new TransferManager(credentials); 应该是tx = new AmazonS3Client(credentials); . 我不确定传输管理器是如何工作的,但我假设它挂起的原因是它完成后没有关闭连接,但这可能是另一个话题......

于 2012-11-27T21:45:37.527 回答