3

動画ファイルを一連のプロパティを持つレコードに関連付けようとしていますが、ユーザーが 1 つの形式ですべてを実行できるようには見えません。動画に名前を付け、説明を入力し、質問に答えて、ファイルをアップロードします。

実行したい手順は次のとおりです。

  1. ユーザーには、次のフィールドを持つフォームを含むページが表示されます: 名前、説明、ファイル セレクター。
  2. ファイルは blob として保存され、id は名前と説明と共に記録されます。

私が学ぶことができるこれを行う例や、あなたが私に指摘できるチュートリアルはありますか? グーグルからのものは、ファイルのアップロードとそれにリダイレクトされることのみを示しています。

初歩的な質問で申し訳ありません!

4

3 に答える 3

5

http://demofileuploadgae.appspot.com/ - ブロブストアへの私のデモ アップローダ。

アップロード用の私のコード: http://code.google.com/p/gwt-examples/source/browse/trunk/DemoUpload/src/org/gonevertical/upload/#upload/server%3Fstate%3Dclosed

于 2010-09-06T16:30:47.807 に答える
3

画像をアップロードして記事に関連付けるために使用しているコードは次のとおりです。一番大変だったのは、記事 ID を取得してアップロード ハンドラーにアクセスすることでした。この問題を回避するために、ファイル名を記事 ID として設定することで解決しました。

from lib import urllib2_file
from lib.urllib2_file import UploadFile

# this view serves a task in a queue
def article(request):
       article = Article.objects.get(id=form.cleaned_data['article'])

       try:
            image = StringIO(urllib2.urlopen(image_url).read())
        except (urllib2.HTTPError, DownloadError):
            article.parsed = True
            article.save()
        else:
            image = UploadFile(image, '.'.join([str(article.id), image_url.rsplit('.', 1)[1][:4]]))
            upload_url = blobstore.create_upload_url(reverse('Articles.views.upload'))

            try:
                urllib2.urlopen(upload_url, {'file': image})
            except (DownloadError, RequestTooLargeError):
                pass

    return HttpResponse(json.dumps({'status': 'OK'}))

def upload(request):
    if request.method == 'POST':
        blobs = get_uploads(request, field_name='file', populate_post=True)

        article = Article.objects.get(id=int(blobs[0].filename.split('.')[0]))
        article.media = blobs[0].filename
        article.parsed = True
        article.save()

        return HttpResponseRedirect(reverse('Articles.views.upload'))
    else:
        return HttpResponse('meow')

    def upload(request):
        if request.method == 'POST':
            blobs = get_uploads(request, field_name='file', populate_post=True)

            article = Article.objects.get(id=int(blobs[0].filename.split('.')[0]))
            article.media = blobs[0].filename
            article.parsed = True
            article.save()

            return HttpResponseRedirect(reverse('Articles.views.upload'))
        else:
            return HttpResponse('meow')

# this serves the image
def image(request):
    blob = BlobInfo.gql("WHERE filename='%s' LIMIT 1" % request.form.cleaned_data['id'])[0]

    return HttpResponse(BlobReader(blob.key()).read(),
                        content_type=blob.content_type)

また、これが必要になりますhttp://fabien.seisen.org/python/urllib2_file/

于 2010-08-04T20:19:45.427 に答える
1

これが私がそれをした方法です。思ったより簡単です。Blobstoreの概要から抜粋した次の点に注意してください。 「Blobstoreがユーザーのリクエストを書き換えると、アップロードされたファイルのMIME部分の本文が空になり、blobキーがMIME部分ヘッダーとして追加されます。他のすべてのフォームフィールドと部分は保持され、アップロードハンドラーに渡されます。」アップロードハンドラーでは、他のフォームフィールドでやりたいことが何でもできます。

    class Topic(db.Model):
        title = db.StringProperty(multiline=False)
        blob = blobstore.BlobReferenceProperty()
        imageurl = db.LinkProperty()

    class MainHandler(webapp.RequestHandler):
        def get(self):
            upload_url = blobstore.create_upload_url('/upload')
            self.response.out.write('<html><body>')
            self.response.out.write('<form action="%s" method="POST" enctype="multipart/form-data">' % upload_url)
            self.response.out.write("""Upload File: <input type="file" name="file"><br>
            <div><label>Title:</label></div>
            <div><textarea name="title" rows="1" cols="25"></textarea></div><input type="submit" 
                name="submit" value="Submit"> </form>""")
            self.response.out.write('<br><br><h2>TOPIC LIST</h2><table border="1"><tr><td>')
            for topic in Topic.all():                
                self.response.out.write('<div><img src="%s=s48"/>' % topic.imageurl)
                self.response.out.write('<div><b>Image URL: </b><i>%s</i></div>' % topic.imageurl)
                self.response.out.write('<div><b>Title: </b><i>%s</i></div>' % topic.title)
            self.response.out.write('</td></tr></table><br>') 
            self.response.out.write('</body></html>')

    class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
        def post(self):
            upload_files = self.get_uploads('file')  # 'file' is file upload field in the form
            blob_info = upload_files[0]
            topic = Topic()
            topic.title = self.request.get("title")
            topic.blob = blob_info.key()
            topic.imageurl = images.get_serving_url(str(blob_info.key()))
            topic.put()        
            self.redirect('/')
def main():
    application = webapp.WSGIApplication(
          [('/', MainHandler),
           ('/upload', UploadHandler),
          ], debug=True)
    run_wsgi_app(application)
于 2010-11-12T07:29:27.940 に答える