【发布时间】:2014-03-26 06:53:19
【问题描述】:
我正在尝试在 python 中制作基于 Google App Engine 的 Web 应用程序。其中一部分涉及显示在 IMDb 上托管的电影海报。我有海报的链接。例如。
http://ia.media-imdb.com/images/M/MV5BNTM3OTc0MzM2OV5BMl5BanBnXkFtZTYwNzUwMTI3._V1._SX94_SY140_.jpg
然后我试着把它放在一个 HTML 页面中:
<a href="https://ia.media-imdb.com/images/M/MV5BNTM3OTc0MzM2OV5BMl5BanBnXkFtZTYwNzUwMTI3.jpg">
<img src="https://ia.media-imdb.com/images/M/MV5BNTM3OTc0MzM2OV5BMl5BanBnXkFtZTYwNzUwMTI3.jpg">
</a>
图片未显示,点击后会打开一个页面:
推荐被拒绝
您无权访问此服务器上的“https://ia.media-imdb.com/images/M/MV5BNTM3OTc0MzM2OV5BMl5BanBnXkFtZTYwNzUwMTI3.jpg”。
参考#24.84d81002.1393249598.981ca7
通过this 问题,我知道IMDb 不允许推荐到任何其他网站。解决方案是自己获取图像,保存,然后自己提供。 为此,我关注了this link。
我创建了一个数据存储对象,用于存储电影的各种信息以及使用 urlfetch api 获取的海报。代码的相关部分是
from google.appengine.ext import db
from google.appengine.api import urlfetch
class Movie(db.Model):
title = db.StringProperty()
poster = db.BlobProperty(default=None)
coverurl = "https://ia.media-imdb.com/images/M/MV5BNTM3OTc0MzM2OV5BMl5BanBnXkFtZTYwNzUwMTI3.jpg"
movie = Movie()
posterimg = urlfetch.fetch(coverurl).content
movie.cover = db.Blob(posterimg)
movie.put()
现在,为了渲染 html 页面,我从数据存储中获取了电影对象
m = Movie.gql("WHERE title = :1", title).get()
img = m.posterimg
html 页面呈现为
imghtml = ' <img src="' + img + '"> </a>'
一个错误是预期的,并被接收为:
UnicodeDecodeError:“ascii”编解码器无法解码位置 0 中的字节 0xff:序数不在范围内 (128)
解决这个问题的方法是什么? 如何在 html 图像中包含作为 blob 存储在 Datastore 中的图像?
【问题讨论】:
-
我希望你不是说你在未经许可的情况下从他们的网站上窃取图像。
-
如果他们自己允许访问我们,这算不算偷窃?
-
访问不等于复制。如果您在未经所有者许可的情况下复制图像,您将违反版权法。
标签: html image google-app-engine blob google-cloud-datastore