Python 当用户不使用';如果不提交要上载的图像,blob是否仍存储在blobstore中?

Python 当用户不使用';如果不提交要上载的图像,blob是否仍存储在blobstore中?,python,google-app-engine,blobstore,Python,Google App Engine,Blobstore,我允许一次上传10张图片(直接上传到blob商店)。 图像i与表单中的文本i一起 并非所有内容都需要图像,因此在用户提交表单时,图像通常没有选定的图像文件 我希望只有BLOB会被上传到图像中(因为这是在开发服务器上发生的事情) 然而,当我上线时,我在blob存储中看到了与内容长度为0的图像相对应的大量空blob: Blob列表>(应用程序/八位字节流)0字节,2012-08-14 17:11:54 AMIfv94Y7ie8cE84WZfEWGZw-NKJPE4iUaYn25zN1J-uftmoC

我允许一次上传10张图片(直接上传到blob商店)。 图像i与表单中的文本i一起

并非所有内容都需要图像,因此在用户提交表单时,图像通常没有选定的图像文件

我希望只有BLOB会被上传到图像中(因为这是在开发服务器上发生的事情)

然而,当我上线时,我在blob存储中看到了与内容长度为0的图像相对应的大量空blob:

Blob列表>(应用程序/八位字节流)0字节,2012-08-14 17:11:54 AMIfv94Y7ie8cE84WZfEWGZw-NKJPE4iUaYn25zN1J-uftmoCESQoQFBimdiZr19suNBg_Kufw0P2FRXIADM6ZPUFUA6O9UVQ5UEQSVIOXABSDQEMWDJH5GVH-8TTLZZZ8RR1FHZD47ZZZZZIPDIF1XSKA6A4AKTDVCNGEDMPW8LV6NLCFFU 无法显示具有此内容类型的Blob

我如何预防这些?这是我的密码:

class AdminHandler(webapp2.RequestHandler):
    #displays a form that includes content1, img1, content2, image2..
    def get(self):
        upload_url = blobstore.create_upload_url(self.uri_for('image-upload-handler'))
        template_values = {'page_name': 'admin', 'upload_url': upload_url}
        template = jinja_environment.get_template('admin.html')
        self.response.out.write(template.render(template_values))

class BlogPost(ndb.Model):
    date = ndb.DateProperty(required=True)
    title = ndb.StringProperty(required=True)
    blob_keys = ndb.BlobKeyProperty(repeated=True)
    content = ndb.TextProperty(repeated=True)
    content_order = ndb.StringProperty(repeated=True)

    @classmethod
    def get_blog_posts(cls):
        return cls.query().order(-cls.date)


class ImageUploadHandler(blobstore_handlers.BlobstoreUploadHandler):
    def post(self):
        password = self.request.get('password', None)
        if str(password).lower() == 'cyclist':
            day = self.request.get('day', None)
            month = self.request.get('month', None)
            year = self.request.get('year', None)

            day, month, year = map(int, (day, month, year))

            try:
                date = datetime(year, month, day)
                #date = datetime.today()
            except ValueError:
                date = datetime.today()

            title = self.request.get('title', None)

            blob_keys = [i.key() for i in self.get_uploads()]
            #assert(blob_keys)
            content = []
            content_order = []
            for i in range(1, 11):
                content_i = self.request.get("content{0}".format(i), None)
                if content_i:
                    content_i = cgi.escape(content_i)
                    content_i = "<br />".join(content_i.replace("\r\r", "\r").splitlines())

                    content.append(content_i)
                    content_order.append("content_next")

                img_i = self.request.get("img{0}".format(i), None)
                if img_i and not "Content-Length: 0" in str(img_i):
                    content_order.append("image_next")

            #assert(content)

            blog_post = BlogPost()
            blog_post.title = title
            blog_post.blob_keys = blob_keys
            blog_post.content = content
            blog_post.date = date
            blog_post.content_order = content_order
            blog_post.put()
            ok = True
            success = "success"
        else:
            ok = False
            success = "wrong password"



<form action="{{upload_url}}" enctype="multipart/form-data"  method="post">
    Date day e.g. 31: <input id='day' type="text" name="day" /><br />
    Date month e.g. 12: <input id='month' type="text" name="month" /><br />
    Date year e.g. 2012: <input id='year' type="text" name="year" /><br />

    Title: <input id="title" type="text" name="title" /><br />
    Content1: <br />
    <textarea id="styled2" name="content1"></textarea>
    <br />
    Image1:<input type="file" name="img1"/><br />
    ...<br />
    {% for i in range(2, 11) %}
    Content{{i}}: <br />
        <textarea id="styled" name="content{{i}}"></textarea>
    <br />
    Image{{i}}:<input type="file" name="img{{i}}"/><br />
    ...<br />
    {% endfor %}
    password: <input id="password" type="text" name="password" /><br />
    <input type="submit" value="Submit" /><br />
    <div id="error-box"></div>
</form>
类AdminHandler(webapp2.RequestHandler):
#显示包含content1、img1、content2和image2的表单。。
def get(自我):
upload\u url=blobstore.create\u upload\u url(self.uri\u for('image-upload-handler'))
模板_值={'page_name':'admin','upload_url':upload_url}
template=jinja_环境。获取_模板('admin.html'))
self.response.out.write(template.render(template_值))
BlogPost类(ndb.Model):
date=ndb.DateProperty(必需=True)
title=ndb.StringProperty(必需=True)
blob_keys=ndb.BlobKeyProperty(重复=真)
content=ndb.TextProperty(repeated=True)
content\u order=ndb.StringProperty(repeated=True)
@类方法
def获取博客帖子(cls):
返回cls.query().order(-cls.date)
类ImageUploadHandler(blobstore\u handlers.BlobstoreUploadHandler):
def post(自我):
password=self.request.get('password',None)
如果str(password).lower()=='cyclist':
day=self.request.get('day',无)
month=self.request.get('month',None)
年份=self.request.get('year',None)
日、月、年=地图(整数,(日、月、年))
尝试:
日期=日期时间(年、月、日)
#date=datetime.today()
除值错误外:
date=datetime.today()
title=self.request.get('title',无)
blob_keys=[i.key()表示我在self.get_uploads()]
#断言(blob_键)
内容=[]
内容\顺序=[]
对于范围(1,11)内的i:
content_i=self.request.get(“content{0}.”格式(i),无)
如果内容i:
content\u i=cgi.escape(content\u i)
content_i=“
”。加入(content_i.replace(“\r\r”,“\r”).splitlines() content.append(content\u i) content\u order.append(“content\u next”) img_i=self.request.get(“img{0}.”格式(i),无) 如果img_i而不是str(img_i)中的“内容长度:0”: 内容\顺序。追加(“图像\下一步”) #断言(内容) blog_post=BlogPost() blog_post.title=标题 blog_post.blob_keys=blob_keys blog_post.content=内容 blog_post.date=日期 blog\u post.content\u order=内容\u order blog_post.put() ok=正确 success=“success” 其他: ok=错误 success=“密码错误” 日期日期,例如31:
日期月份,例如12:
日期年份,如2012年:
标题:
内容1:

图1:

{范围(2,11)%内的i的百分比} 内容{{i}:

图像{{i}}:

{%endfor%} 密码:

注意:当我上线时,我必须在str(img_I)中添加
而不是“Content Length:0:
,因为在开发服务器上它是一个空字符串,但在应用程序引擎上它不是。

这是一个,我建议你添加一个星

在修复之前,几乎所有选项都是在客户端捕获空上传,而不提交它们,或者在上载处理程序中从blobstore中删除长度为零的blob