我已经尽可能多地阅读了这个主题,并且我已经浏览了文档(AWS 2.2.9),并尽可能地使用他们的示例代码,而我正在使用它们。我被卡住了。以下是我为设置所做的事情:
清单 -
相关权限 - " android.permission.INTERNET对"和" android.permission.ACCESS_NETWORK_STATE"
服务 -
android:name =" com.amazonaws.mobileconnectors.s3.transferutility.TransferService"机器人:启用="真"
我设置了我的存储桶以及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());
}
});
我之后还暂时添加了一个等待循环,看看我是否只是不耐烦但它只是显示状态=等待直到我杀了应用程序:
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:" MyBucket"
我也很好奇键是否应该是我的.upload()中的文件名应该包含路径或文件名。我已经尝试了两种,但其中哪一种是正确的:
/storage/emulated/0/Android/data/com.blah.blah/files/video.mp4
或
video.mp4
到目前为止好吗?
感谢。
-var
答案 0 :(得分:2)
我有同样的问题,以下主题给了我解决方案。
Uploading files doesn't work with TransferUtility Amazon S3 in Android
在清单中,我必须将转移实用程序服务放在应用程序标记内。
答案 1 :(得分:2)
将它放在AndroidManifest.xml中的应用程序标记内
<service android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService"
android:enabled="true" />
答案 2 :(得分:0)
我在AsyncTask类中进行上传,状态从未改变,保持WATING。 将代码切换到内部de Activity正常工作。 因此,请尝试在您的活动中调用TransferObserver observer = transferUtility.upload()。