2012-11-27 2 views
0

마지막 파일이 다운로드 완료 후 Amazon S3 다운로드가 멈추는 문제가 있습니다. Java 응용 프로그램에서 "사용 중"이므로 파일을 삭제하지 못하도록 "잠금"합니다. 그렇지 않으면 잘 작동합니다. 또한 진행 상황이 가장 큰 파일의 진행률이 100이라고 표시되고 완료 될 때까지 더 이상 업데이트하지 않고 다운로드가 진행됨에 따라 진행 상황이 올바르게 업데이트되지 않는 것처럼 보입니다.이 시점에서 스크립트가 중지되기 전에 "상태 : 완료 됨"이라고 표시됩니다. . 내가 꽤 많이 GUI없이 방법의 다운로드 버전을 만들기 위해 SDK와 함께 제공되는 아마존 S3 전송 진행 샘플의 샘플 코드를 분리 해킹Amazon S3 Java 다운로드가 마지막 파일에서 중단됨

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()); 
} 

, 그래서 그것을 놀랍 : 내 코드는 다음과 같습니다 심지어 작동합니다. 저는 Java가 좋지 않고 AWS API도 더 좋지 않으므로 어떤 지침도 환영합니다.

답변

0

중단 문제에 대한 해결책을 찾았습니다. 분명히 tx = 새 TransferManager (자격 증명);이어야합니다. tx = 새로운 AmazonS3Client (증명서);. 나는 이전 매니저가 어떻게 작동하는지 모르겠다.하지만 교수형에 처한 이유는 그것이 끝났을 때 연결이 닫히지 않는다고 가정하고있다.하지만 아마도 다른 주제 일 것이다. ...

+1

조금 더 파고 들었다. 전송 관리자의 원래 가정은 거의 정확하다는 것을 알았습니다. ** tx.shutDownNow() **를 통해 종료 할 때까지 열린 채로 남아 있습니다. 그러나 부분 파일을 남기므로 모든 작업이 완료되면 호출해야합니다 전송 중에 shutDownNow()가 호출되면 재미있게 내가 다른 사람에게 물어볼 때까지 뭔가에 대한 답을 찾을 수 없다 ... – DGolberg