首先,如果有人提出这个问题,我想道歉,我一直在谷歌搜索,但没有找到任何解决方案。
网址A:http://graph.facebook.com/1787989776/picture
网址B:http://profile.ak.fbcdn.net/hprofile-ak-ash3/49968_1787989776_350012849_q.jpg
简而言之:我想在访问网址A 后,使用文件名作为网址重定向来缓存我的照片,而不是网址A 。< / p>
详细说明:
我们总是缓存下载的图片。在我的情况下,我想缓存Facebook个人资料的照片。例如:从网址A 下载的图片。
点击该链接即可看到,我们正被重定向到网址B 。
使用网址A 缓存我的照片并不安全,因为下次调用时图片可能已更改(用户更改了他的个人资料照片,但Facebook通过维护图表网址来简化我们的工作),虽然我的图像加载器不会获取任何新图像,因为条件“图像在缓存中找到”给了我真实,确定它确实如此。
所以,如果我能获得网址B 并使用它来缓存我的照片,那就太好了。
我相信描述已经足够了,但如果你想知道我在这里做了什么,那就是:
URL url = new URL(imgUrl); // imgUrl = URL A
URLConnection connection = url.openConnection();
connection.connect();
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(downloadedFile); // downloadedFile = File named with encoded URL A
byte data[] = new byte[10240]; // 10kb
int count;
while ((count = input.read(data)) != -1) {
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
答案 0 :(得分:0)
如果切换到HttpClient,可以使用client.setRedirectHandler()设置RedirectHandler,这样您就可以获得URL A重定向到的URL B.
答案 1 :(得分:0)
url = "http://graph.facebook.com/" + params[0] + "/picture?type=large";
URL obj = new URL(url);
HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
conn.setReadTimeout(5000);
conn.addRequestProperty("Accept-Language", "en-US,en;q=0.8");
conn.addRequestProperty("User-Agent", "Mozilla");
conn.addRequestProperty("Referer", "google.com");
System.out.println("Request URL ... " + url);
int status = conn.getResponseCode();
if (status != HttpURLConnection.HTTP_OK) {
if (status == HttpURLConnection.HTTP_MOVED_TEMP
|| status == HttpURLConnection.HTTP_MOVED_PERM
|| status == HttpURLConnection.HTTP_SEE_OTHER) {
String URL2 = conn.getHeaderField("Location");
}
}