背景: 我使用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服务器盒子上的配置问题吗?
答案 0 :(得分:2)
这是我的tomcat服务器盒上的配置问题吗?
不,完全没有,您的服务器配置与外部资源可访问性无关,如果您收到@._V1._SY317_CR5,0,214,317_.jpg 403 (Forbidden)
- 这显然意味着服务器拒绝您的请求。
似乎有很多人对IMDB有这样的问题 - see this
答案 1 :(得分: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'"));