1

背景:我正在使用 Spring Web MVC 以及 JSP 和 HTML/JavaScript 来编写一个网站。我添加了一个搜索功能,它向 imdbapi.org 发送查询并接收包含电影/电视节目信息的 JSON 对象(通过 AJAX)。JSON 对象包含每个结果的“海报”字段,它是图像的 URL(在 imdb 服务器上)。然后使用 jQuery 显示结果并显示海报(如果可用)。

someDiv.append($("<img src='"+results[i].poster+"'></img'").addClass("resultImg"));

问题:在 STS 内置服务器上运行并在本地访问时,这绝对可以正常工作,例如。

http://localhost:8080/myWebPage.whatever

我有一个安装了 Tomcat 7 的 ubuntu 服务器盒,在部署到服务器时,每个图像都会出现 403 错误。来自 chrome 控制台的示例:

GET http://ia.media-imdb.com/images/M/MV5BMTY2NDY4NDA0OV5BMl5BanBnXkFtZTcwNTI4MzUyMQ@@._V1._SY317_CR5,0,214,317_.jpg 403 (Forbidden) 

更多信息:已在 chrome 和 firefox 中进行了测试,结果相同。如果我无法修复,那么一种解决方案是下载到我认为服务器上的临时文件夹......

这是我的 Tomcat 服务器上的配置问题吗?

4

2 回答 2

2

这是我的 Tomcat 服务器上的配置问题吗?

不,一点也不,您的服务器配置与外部资源可访问性无关,如果您得到@._V1._SY317_CR5,0,214,317_.jpg 403 (Forbidden)- 这显然意味着服务器拒绝您的请求。

似乎很多人对 IMDB 有这类问题 -看到这个

于 2013-04-21T20:56:16.803 回答
1

我已经“使它工作”,它不是问题的直接解决方案,而是一种解决方法。在我的服务器上使用本地代理我将图像下载到java中的内存中,然后返回到网页......

Java(服务器端)

@RequestMapping(value="/pages/proxyImg")
public ResponseEntity<byte[]> proxyImage(String url) {
    log.info("Image Proxy server: " + url);
    try {
        final HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.IMAGE_JPEG);
        return new ResponseEntity<byte[]>(IOUtils.toByteArray(new URL(url).openConnection().getInputStream()), headers, HttpStatus.CREATED);
    } catch(Exception e) {
        e.printStackTrace();
        return null;
    }
}

Javascript

someDiv.append($("<img src='"+"proxyImg.htm?url="+results[i].poster+"'></img'"));
于 2013-04-22T19:45:38.240 回答