[英]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.