2012-08-15 1 views
0

나는 한 번에 (블롭 저장소에 직접) 업로드되는 10 개의 이미지를 허용합니다. image_i는 양식의 text_i와 함께 사용됩니다.사용자가 업로드 할 이미지를 제출하지 않으면 blob은 여전히 ​​blobstore에 저장됩니까?

모든 콘텐츠에 이미지가 필요하지는 않으므로 사용자가 양식을 제출할 때 image_i에 선택한 이미지 파일이없는 경우가 종종 있습니다.

이미지에 blob 만 업로드 될 것으로 예상됩니다 (개발 서버에서 발생하는 현상).

물방울 목록> (응용 프로그램/octet-stream을) 0 바이트, 2012-08- : 나는 라이브 갔을 때

는 그러나, 나는 0 이미지 콘텐츠 길이에 해당하는 BLOB 저장소에 빈 모양의 힙을 보았다 이 콘텐츠 유형 14 17시 11분 54초 AMIfv94Y7ie8cE84WZfEWGZw-NKJPE4iUaYn25zN1J-uftmoCESQoQFBimdiZr19suNBg_kUFW0P2frxIadmpd6LzPuFuA6o9UVq5UEqSvioXaBsDQeMwdJiH5gvh-8TtlZz8Rr1fRHHZd47zsiZpDiF1XsKa6A4aKTDvCnGEdMpW8lV6nlcFfU 물방울이 표시 될 수 없다.

어떻게 방지합니까? 나는 그것이 빈 문자열입니다하지만 애플 리케이션 엔진에 그렇지 않은 개발 서버에 있기 때문에 살아 갔을 때 나는 and not "Content-Length: 0" in str(img_i):를 추가했다

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> 

참고 : 여기 내 코드입니다.

답변

2

이것은 known issue입니다. 별표를 추가하시기 바랍니다.

고정 될 때까지는 클라이언트 측에서 비어있는 업로드를 캐치하거나 업로드하지 않는 것이 좋습니다. 업로드 처리기에서는 길이가 0 인 BLOBstore에서 BLOB를 삭제합니다.

+0

감사합니다 - 나는 그것을 잘못하고 있다고 생각했습니다. :) –

관련 문제