0

ユーザーがファイルをアップロードできるフォームを作成しようとしています。そして、ユーザーの引数を受け取り、renderfunction にパラメーターとして渡される URL にマップされる UploadHandler に投稿するフォームがあります。フォームをレンダリングするところまでは機能しますが、ファイルを送信すると空白のページにリダイレクトされ、コンソールに次のエラーが表示されます。

 ERROR    2013-03-17 11:53:30,769 dev_appserver_blobstore.py:404] Could not find session       for ahhkZXZ-a3Vyc3NhbW1hbmZhdHRuaW5nYXJyGwsSFV9fQmxvYlVwbG9hZFNlc3Npb25fXxgxDA
 INFO     2013-03-17 11:53:30,779 dev_appserver.py:3104] "POST /_ah/upload/ahhkZXZ-   a3Vyc3NhbW1hbmZhdHRuaW5nYXJyGwsSFV9fQmxvYlVwbG9hZFNlc3Npb25fXxgxDA HTTP/1.1" 404 -

私はまだこれに慣れていませんが、何が起こっているのかわかりません。マッピングがうまくいかないことは理解していますが、それでも正しいハンドラー (SummaryHandler) にリダイレクトされない理由がわかりません。

ファイルアップロード用のフォームを提供するクラス:

class CreateHandler(BaseHandler):
def get(self):
    self.render('create.html', upload_url = blobstore.create_upload_url('/upload'))

HTML フォーム ('create.html'):

<h2 class="main-title">Upload a file!</h2>  
<form action="{{upload_url}}" method="post" enctype="multipart/form-data">
    <label>
        <div>Upload:</div> 
        <input type="file" name="file" accept="application/pdf"><br> 
    </label>
    <div class="error">
        {{file_error}}
    </div>
    <br>
    <input type="submit" name="submit" value="Submit"> 
 </form>

形式 args を取るアップロード ハンドラ:

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
    upload_files = self.get_uploads('file')  
    blob_info = upload_files[0]

    #validation of form-vars
    have_error=False
    file_data=dict()
    if not (blob_info.content_type == 'application/pdf'):
        file_data['file_error']="You can only upload files in pdf-format."
        have_error=True
    if have_error:
        self.render('create.html', **file_data)
    else:
        #'parent' is just some stuff for organising the database. 
        #Not important in this context
        the_file = A_File(parent = summary_key(),   
                          file_key=str(blob_info.key()))
        the_file.put()
        if the_file:
            self.redirect('/summary/%s' % str(the_file.key().id()))
        else:
            _error="Could not find the file"
            self.render('welcome.html', error=_error)

アプリケーション ハンドラとそのマッピング:

app = webapp2.WSGIApplication([
(r'/', WelcomeHandler),
(r'/create', CreateHandler),
(r'/upload', UploadHandler),
(r'/summary/(\d+)', SummaryHandler) #I have not included this handler in the text
], debug=True)
4

1 に答える 1

1

このセッションの有効期限が切れたか、使用されたことが原因である可能性があります。を使用して作成した URL にcreate_upload_urlは有効期限があります (10 分だと思います)。実際に投稿する前に、JavaScript を使用してその URL を更新することをお勧めします。

また、何らかの理由でファイルが Blobstore にアップロードされた場合、同じ URL を再度使用することはできません。1 回のリクエストにのみ有効です (ただし、複数のファイルを持つことができます)。

あなたの例では、ファイル固有のチェックをすべて削除し、何かをアップロードして、BLOB またはセッション キーがあるかどうかを Datastore Viewer の管理コンソールで確認してください。これには、次の URL からアクセスできます。

 http://localhost:8080/_ah/admin/datastore
于 2013-03-17T13:09:45.917 に答える