簡體   English   中英

成功上傳到S3后刪除文件

[英]Delete file after successful upload to S3

我想將文件上傳到S3,然后在上傳成功時將其刪除。 我正在使用TransferUtility

for(final File p:photos){
        String key = getKey(p.getName());
        TransferObserver observer = getTransferUtility().upload(S3_BUCKET,key,p);
        observer.setTransferListener(new TransferListener() {
            @Override
            public void onStateChanged(int id, TransferState state) {
                if(TransferState.COMPLETED == state){
                    p.delete();
                }
            }

            @Override
            public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {

            }

            @Override
            public void onError(int id, Exception ex) {

            }
        });

    }

由於上傳是異步的,因此對onStateChanged的調用必然與for循環異相。 那么如何確保每次刪除正確的文件?

更新

一種可行的方法是,如果我可以從onStateChanged內部獲取正確的observer 然后我就能做到

@Override
public void onStateChanged(int id, TransferState state) {
  if(TransferState.COMPLETED == state){
    Observer obs = getParentObserver();//similar to a Fragment's getActivity() or getContext()
    File file = new File(obs.getAbsoluteFilePath());
    file.delete();
  }
}

請注意,以下內容不起作用,因為id可能永遠不會匹配

@Override
public void onStateChanged(int id, TransferState state) {
  if (TransferState.COMPLETED == state) {
    if (observer.getId() == id) {
      String filePath = observer.getAbsoluteFilePath();
      File file = new File(observer.getAbsoluteFilePath());
    }
  }
}  

您可以按ID檢索轉移。

String path = getTransferUtility().getTransferById(id).getAbsoluteFilePath();
new File(path).delete();
getTransferUtility().delete(id);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM