部署到服务器时,图像获取403被禁止

时间:2013-04-21 20:38:25

标签: java javascript html spring-mvc tomcat7

背景: 我使用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服务器盒子上的配置问题吗?

2 个答案:

答案 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'"));