【问题标题】:Read image from datastore into the <img> tag将图像从数据存储区读入 <img> 标签
【发布时间】:2014-12-09 00:27:23
【问题描述】:

您好,我正在尝试上传实体的图像并将其放入另一个页面的图像标签中,但无法完成。

将整个 blob 内容写入响应是有效的,但如果我试图将 blob 内容写入 html 页面中的 标记,则它不可见。

以下是代码。请帮忙

import webapp2
from google.appengine.ext import ndb
import mimetypes
import logging


HTML_POST_PAGE = \
"""
<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Image Upload</title>
</head>
<body>
<form action="/file_upload" enctype="multipart/form-data" method="post">
    <div><input type="file" name="file"/></div>
    <div><input type="submit" value="Upload"></div>

</form>
</body>
</html>
"""


OUTPUT_HTML_PAGE = """
<!DOCTYPE HTML>
<html lang="en">
<head>
    <title>Image Upload</title>
</head>
<body>
<h1>Serving image dynamically.</h1>
<img src='/dyimg_serve?img_id=%s'></img>
</body>
</html>
"""

#Hardcoded value for Key name
email_id = "ryan@gmail.com"

#Updated Image Upload
class MyUser(ndb.Model):
    file_name = ndb.StringProperty()
    blob = ndb.BlobProperty()


class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.write(HTML_POST_PAGE)

#Handler for image upload
class FileUpload(webapp2.RequestHandler):
    def post(self):
            #Creating entity with fixed id
            my_user = MyUser(id=email_id)

            #Below lines to be added in the main code to put image in datastore
            file_upload = self.request.POST.get("file", None)
            file_name = file_upload.filename
            my_user.file_name = file_name
            my_user.blob = file_upload.file.read()
            userKey = my_user.put()

            #Navigating to other page to read image
            self.response.out.write(OUTPUT_HTML_PAGE)


#Handler to read image into the <img> tag in the OUTPUT_HTML_PAGE 
class DynamicImageServe(webapp2.RequestHandler):
    def get(self):
        oldUser = MyUser.get_by_id(email_id)
        if oldUser != None and oldUser.blob != None:
##            self.response.headers['Content-Type'] = 'image/png'
            self.response.headers[b'Content-Type'] = mimetypes.guess_type(oldUser.file_name)[0]
            self.response.write(oldUser.blob)
        else:
            self.response.write('Error while fetching image data')


application = webapp2.WSGIApplication([('/',MainPage ),('/file_upload',FileUpload),('/dyimg_serve',DynamicImageServe),], debug=True)         

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore image-uploading app-engine-ndb


    【解决方案1】:

    您没有在输出页面上设置 img 标签的 src 属性。

    <img src="/dyimg_serve"></img>
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 2013-03-27
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多