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