亚马逊s3图像下载在Android上

时间:2014-01-17 02:52:19

标签: android amazon-s3

我注意到在Android上出现了一个非常奇怪的事件。我有一个存储桶,其中包含许多我需要在iPhone和Android应用上显示的图像。在iPhone上,一切正常,因为我使用SDWebImage来下载,缓存和显示图像。在Android应用中,我正在使用Shutterbug

当我使用以下链接在Android上下载图像时,一切正常:

https://s3.amazonaws.com/ {{bucket name}} / image.png

但是,当我使用以下链接时,我会收到错误:

https:// {{bucket name}}。s3.amazonaws.com / images.png

我得到的错误如下:

java.net.UnknownHostException: https://{{bucket name}}.s3.amazonaws.com/image.png
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:279)
at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179)
at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:246)
at com.applidium.shutterbug.downloader.ShutterbugDownloader$1.doInBackground(ShutterbugDownloader.java:65)
at com.applidium.shutterbug.downloader.ShutterbugDownloader$1.doInBackground(ShutterbugDownloader.java:52)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)

在更改网址时,我有什么理由得到这个吗?理想情况下,我更喜欢第二种,因为它可以读取Google的robot.txt。

1 个答案:

答案 0 :(得分:1)

我看到了这个页面:

http://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names

原来我的桶里有一个下划线(_)。这违反了标准。在iOS中,即使使用非标准字符,这些URL也可以正常工作,但在Android中它拒绝它。最好确保不要对s3存储桶名称使用非标准字符。

如果您这样做,请使用第一个链接。在这种情况下,dns查找中没有非标准字符(https://s3.amazonaws.com/..。)