我注意到Android上确实发生了一件很奇怪的事情。我有一个存储桶,其中包含许多需要在iPhone和Android应用程序上显示的图像。在iPhone上,当我SDWebImage
用来下载,缓存和显示图像时,一切正常。在Android应用程序上,我正在使用Shutterbug
。
当我使用以下链接在Android上下载图片时,一切正常:
https://s3.amazonaws.com/ {{bucket name}} / image.png
但是,当我使用下面的链接时,出现错误:
https:// {{bucket name}}。s3.amazonaws.com/image.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)
更改URL时为什么会有这个原因?理想情况下,我更喜欢第二个,因为它将允许读取Google的robot.txt。
我看到了此页面:
http://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
原来,我的存储桶的名称(_)带有下划线。这违反了标准。在iOS中,即使使用非标准字符,这些URL仍然有效,但在Android中,它会拒绝它。最好确保s3存储桶名称不要使用非标准字符。
如果您这样做,请使用第一个链接。在这种情况下,DNS查找中没有非标准字符(https://s3.amazonaws.com/ ..。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句