我正在尝试从传入的共享意图中下载一个图像,这是一个url字符串...它适用于所有其他情况(我已经尝试过),除了那些来自imgur的情况。我最终得到的是:
有没有人有任何想法可能是什么原因?
我用来下载文件的代码是:
// Got this here: http://wininterview.blogspot.co.uk/2013/04/download-file-in-android-from-remote.html
public static void downloadFile( String url, String destination ) {
try {
URL u = new URL(url);
File file = new File(destination);
URLConnection ucon = u.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
/*
* Read bytes to the Buffer until there is nothing more to read(-1).
*/
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
FileOutputStream fos = new FileOutputStream(file);
fos.write(baf.toByteArray());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
我要下载的目的地是this.getCacheDir().getPath() + "/" + fileName
在任何人尝试推荐使用imgur API之前,我宁愿尝试找到解决方法,因为传入的意图可以是来自任何地方的图像的网址。
编辑:我尝试使用命令行中的curl下载相同的文件URL,它运行正常。
编辑:有趣的是,如果我执行u.openConnection().getContentLength()
它已经给我503
,所以我甚至无法欺骗请求标头(我也尝试过)。
答案 0 :(得分:0)
我看到一个网站拒绝了没有用户代理字符串的请求。 我不得不添加
private static String USER_AGENT = "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; GT-I9000 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1";
请求:
HttpGet request = new HttpGet(uri[0]);
request.setHeader("User-Agent", USER_AGENT);
response = httpclient.execute(request);
我没有使用URLConnection,但在服务器端应该没有区别。 如果你愿意,我可以发布曾经工作过的代码。 OTOH,我不确定是否是问题的原因。
PS我还看到了-e
中需要--referer
(curl
)切换的网站。没有-e
他们检索了一个带有.zip链接的html而不是.zip本身。
答案 1 :(得分:0)
我弄清楚了......我在某个时刻在图片网址上调用了.toLowerCase()
,并且imgur的网址非常区分大小写。