【发布时间】:2016-03-08 17:29:13
【问题描述】:
我已经尽可能多地阅读了关于这个主题的内容,并且我已经浏览了文档 (AWS 2.2.9) 并尽可能地使用他们的示例代码,但我被困住了。这是我为设置所做的:
清单 -
相关权限 - “android.permission.INTERNET”和“android.permission.ACCESS_NETWORK_STATE”
服务-
android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService" android:enabled="true"
我已经设置了存储桶以及 Cognito 的凭据。这是我为上传添加的代码:
File f = getVideoFile(activity);
...
TransferObserver observer = sTransferUtility.upload(Constants.BUCKET_NAME, f.getName(), f);
observer.setTransferListener(new TransferListener() {
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
Log.e("Transfer", "Percent Complete = " + bytesCurrent / bytesTotal * 100);
}
@Override
public void onStateChanged(int id, TransferState state) {
Log.e("Transfer", "onStateChanged");
Log.e("Transfer", "state = " + state);
}
@Override
public void onError(int id, Exception ex) {
Log.e("Transfer", "Error = " + ex.getMessage());
}
});
我还临时添加了一个等待循环,看看我是否只是不耐烦,但它只是显示 state = WAITING 直到我杀死应用程序:
TransferState state = observer.getState();
while (state != TransferState.COMPLETED) {
Log.e("Transfer", "state = " + state);
try {
Thread.sleep(10000);
state = observer.getState();
} catch (Exception e) {
Log.e("Transfer", "exception " + e.getMessage());
}
}
所有这些都发生在一个片段内。我没有看到任何错误报告(我知道其他人已经观察到缺少配置会导致这种行为,但我认为我已经完成了我应该做的一切,在这里)。
如果听到我忽略的任何内容或需要尝试获取更多信息,我将不胜感激。
编辑:
我并不怀疑整个问题不在于代码,而在于我的配置。
我的 Cognito 和存储桶 ID 如下所示(但不完全是这些):
COGNITO_POOL_ID:“us-east-1:abcdefgh-abcd-efgh-ijkl-mnopqrstuvwxy” BUCKET_NAME:“我的桶”
我也很好奇密钥应该是我的 .upload() 中的文件名应该包含路径还是只包含文件名。我都试过了,但哪一个是正确的:
/storage/emulated/0/Android/data/com.blah.blah/files/video.mp4
或
视频.mp4
到目前为止还好吗?
谢谢。
-VAR
【问题讨论】:
-
您是否在 TransferObserver 上调用刷新?它报告卡在什么状态?
-
WestonE,我添加了刷新。报告状态卡在“WAITING”。
-
这仍然是个问题吗?你是在后台线程中调用它吗?如果您在片段之外进行调用怎么办?你确定文件存在吗?可以下载文件吗? video.mp4 也应该没问题。
-
是的,仍然是个问题。是的,在后台线程中。没有在片段之外尝试过(我想这可能是下一次试验)。该文件存在,我可以使用 TransferObserver::getBytesTotal(); 以字节为单位查看总大小;
-
我不需要从这个应用程序下载,但我会试一试。
标签: android amazon-web-services amazon-s3