1

首先,如果有人问过这个问题,我想道歉,我一直在谷歌搜索,但没有找到任何解决方案。

网址一: http: //graph.facebook.com/1787989776/picture

网址 B:http ://profile.ak.fbcdn.net/hprofile-ak-ash3/49968_1787989776_350012849_q.jpg

简而言之:我想使用文件名作为访问URL A后重定向的 URL 来缓存我的照片,而不是URL A。

详细说明:

我们总是缓存下载的图像。就我而言,我想缓存 facebook 个人资料的照片。例如:从URL A下载的图像。

通过单击链接,您可以看到,我们被重定向到URL B

使用URL A缓存我的照片并不安全,因为图像可能在我下次调用它时已更改(用户更改了他的个人资料照片,但 Facebook api 通过维护图形 URL 来简化我们的工作),而我的图像加载器不会获取任何新图像,因为条件“图像在缓存中找到”给了我真实的,肯定的。

所以,如果我能得到URL 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();
4

2 回答 2

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");                                  
        }
   }
于 2014-05-27T07:42:56.830 回答
0

如果您切换到 HttpClient,您可以使用 client.setRedirectHandler() 设置RedirectHandler,这将允许您获取 URL A 重定向到的 URL B。

于 2013-08-17T05:40:47.330 回答