【发布时间】:2018-12-21 23:54:44
【问题描述】:
我已经查看了几个关于此的问题和答案,但我仍然无法上传到 S3 存储桶。我已经在应用程序标签内的清单中声明了该服务。
每个日志语句都返回正确的信息,但状态始终为 WAITING,并且没有触发任何传输侦听器。我没有收到任何错误,并且 S3 存储桶仍然是空的。
我做错了什么?
public void uploadStoredItems() {
TransferUtility transferUtility = TransferUtility.builder()
.context(AWSProvider.getInstance().getContext())
.awsConfiguration(AWSProvider.getInstance().getConfiguration())
.s3Client(new AmazonS3Client(AWSProvider.getInstance().getIdentityManager().getCredentialsProvider()))
.build();
try {
for (File csvFile : csvFiles) {
String filename = csvFile.getName(); //.substring(csvFile.getName().lastIndexOf('/') + 1);
Log.d(TAG, "This is the filename for upload: " + filename);
// FileReader reads text files in the default encoding.
String line = null;
FileReader fileReader = new FileReader(csvFile);
// Always wrap FileReader in BufferedReader.
BufferedReader bufferedReader = new BufferedReader(fileReader);
while ((line = bufferedReader.readLine()) != null) {
Log.d(TAG, "Here are the lines: " + line);
}
// Always close files.
bufferedReader.close();
TransferObserver uploadObserver = transferUtility.upload(filename, csvFile);
// Gets id of the transfer.
Log.d(TAG, "This is the bucket: " + uploadObserver.getBucket());
Log.d(TAG, "This is the state: " + uploadObserver.getState());
Log.d(TAG, "This is the id: " + uploadObserver.getId());
observers = transferUtility.getTransfersWithType(TransferType.UPLOAD);
TransferListener listener = new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
Log.d(TAG, "onStateChanged: " + state.toString());
if (TransferState.COMPLETED == state) {
Log.d(TAG, "COMPLETE: " + state.toString());
}
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
float percentDonef = ((float) bytesCurrent / (float) bytesTotal) * 100;
int percentDone = (int) percentDonef;
Log.d(TAG, "ID:" + id + " bytesCurrent: " + bytesCurrent
+ " bytesTotal: " + bytesTotal + " " + percentDone + "%");
}
@Override
public void onError(int id, Exception ex) {
// Handle errors
Log.d(TAG, "ERROR ID:" + id + " " + ex.getMessage());
}
};
for (TransferObserver observer : observers) {
if (TransferState.WAITING.equals(observer.getState())
|| TransferState.WAITING_FOR_NETWORK.equals(observer.getState())
|| TransferState.IN_PROGRESS.equals(observer.getState())) {
observer.setTransferListener(listener);
}
Log.d(TAG, "\n observers - id: " + observer.getId() + " state: " + observer.getState() + " key: " + observer.getKey() + " bytes total: " + observer.getBytesTotal());
}
Log.d(TAG, "Bytes Total: " + uploadObserver.getBytesTotal());
}
csvFiles.clear();
} catch(java.io.FileNotFoundException ex) {
System.out.println("Unable to open file");
} catch(java.io.IOException ex) {
System.out.println("Error reading file");
}
}
【问题讨论】:
-
您可以尝试删除
observers = transferUtility.getTransfersWithType(TransferType.UPLOAD);并将侦听器仅附加到uplaodObserver 吗?uploadObserver.setTransferListener(listener)。上传操作和 getTransfersWithType 完成的查询操作之间的数据库中似乎存在同步问题?让我知道这是怎么回事。
标签: java android amazon-web-services amazon-s3 upload