繁体   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