将文件从 Android 缓慢上传到 Amazon S3
Posted
技术标签:
【中文标题】将文件从 Android 缓慢上传到 Amazon S3【英文标题】:Upload file to Amazon S3 from Android slow 【发布时间】:2015-09-21 01:14:41 【问题描述】:我已按照 Amazon 指南将文件上传到 Amazon S3,但我注意到它太慢了。上传一个 20kb 左右的简单 png 文件大约需要 10 秒。
最初我以为问题与线程有关,我已经实现了一个 AsyncTask 来上传图像,但问题仍然存在。以下是用于上传图像的代码。
private class UploadFileTask extends AsyncTask<String, Integer, String>
String remotePath;
String remoteFileName;
File file;
Context context;
S3UploadInterface listener;
public UploadFileTask(Context context,String remotePath,String remoteFileName, File file, S3UploadInterface listener)
this.context=context;
this.remotePath=remotePath;
this.remoteFileName=remoteFileName;
this.file=file;
this.listener=listener;
protected String doInBackground(String... params)
credentialsProvider = new CognitoCachingCredentialsProvider(context,
"MY_PRIVATE_CREDENTIAL",
Regions.US_EAST_1);
TransferManager transferManager = new TransferManager(credentialsProvider);
Upload upload = transferManager.upload(remotePath, remoteFileName, file);
TransferProgress transferred = upload.getProgress();
while (!upload.isDone())
try
publishProgress((int) transferred.getPercentTransferred());
catch (Exception e)
listener.uploadFailed(e);
return "uploaded";
protected void onProgressUpdate(Integer... progress)
if (listener!=null)
listener.currentUploadProgress(progress[0]);
protected void onPostExecute(String result)
if (listener!=null)
listener.uploadCompleted();
有解决这个问题的办法吗? 谢谢:)
【问题讨论】:
你如何测量时间?上传速度可能因网络质量而异。它还受您连接到哪个端点的影响。例如,如果您在欧洲并且您将文件上传到 us-east-1(美国弗吉尼亚州),它可能会很慢。选择离您最近的端点可能会提高速度。 目前我们在欧洲,我们在弗吉尼亚有我们的实例。也许问题是由于区域变化,因为发布的代码是直截了当的。在我们未来的计划中,我们会将我们的实例迁移到爱尔兰,我们将检查问题是否仍然存在。我会持续更新的 您看过 Amazon Route 53 (aws.amazon.com/route53) 吗?它是一种基于 DNS 的产品,可让您根据位置路由到最近的可用 S3 或 AWS 资源。 是的,在我们计划的架构中,我们希望实施 de Route 53 以提供更大的灵活性。 【参考方案1】:这会影响你的 CPU
while (!upload.isDone())
try
publishProgress((int) transferred.getPercentTransferred());
catch (Exception e)
listener.uploadFailed(e);
尝试添加 Thread.sleep 让其他线程有时间运行。
【讨论】:
好点!我按照亚马逊 S3 文档实现了 while 循环,我将尝试使用您的解决方案并检查它是如何工作的。谢谢! @frank 是真的,甚至亚马逊也证实了这一点,请在下面的“如何使用 TransferManager”部分查看。 mobile.awsblog.com/post/Tx1V588RKX5XPQB/… 上传可能比进度条显示的早得多,因为系统正忙于处理处理程序队列中的大量消息。以上是关于将文件从 Android 缓慢上传到 Amazon S3的主要内容,如果未能解决你的问题,请参考以下文章
如何将文件直接从 Django admin 上传到 Amazon S3?缓解 Heroku 应用程序错误(超时)