4

ファイルをアップロードするための簡単な wsgi スクリプトを作成しています。html フォームを使用します。

以下は wsgi スクリプトです。

import os
import cgi
import cgitb; cgitb.enable()


class upfile(object):

    def __init__(self):
        self.script_dir = os.path.dirname(__file__)
        self.errors = []


    def __call__(self, environ, start_response):


        f = open(os.path.join(self.script_dir, 'upload.html'))
        self.output = f.read()
        f.close()

        self.response_content_type = 'text/html;charset=UTF-8'
        fields = None
        if 'POST' == environ['REQUEST_METHOD'] :        
            fields = cgi.FieldStorage(fp=environ['wsgi.input'],environ=environ, keep_blank_values=1)
            fileitem = fields['file']
            fn = os.path.basename(fileitem.filename) 
            open('uploads/' + fn, 'wb').write(fileitem.file.read())


        self.output = self.output % {"filepath":str(fields)} # Just to see the contents

        response_headers = [('Content-type', self.response_content_type),('Content-Length', str(len(self.output)))]
        status = '200 OK'
        start_response(status, response_headers)
        return [self.output]

application = upfile()

次に、HTML フォームにいつものようにファイル フィールドを配置します。

<input type='file' name='file' />

私の問題は、フィールド (cgi.FieldStorage) にファイル名しかないことです。ファイルの内容がありません。ファイル名だけでなく、ファイルの内容もアップロードしてほしい。

以下は、fields 変数に渡される値です。

"FieldStorage(None, None, [MiniFieldStorage('file', 'CatchSkull-large.jpg'), MiniFieldStorage('email', 'chamith@gmail.com'), MiniFieldStorage('operation', 'Upload'), MiniFieldStorage('current', 'upload')])"

フォームの他のフィールドである他のフィールドは無視してください。

前もって感謝します。

4

1 に答える 1

6

最後に私は答えを見つけました。HTMLフォームにenctypeを配置できませんでした。

<form id="upload" name="upload" method="POST" enctype="multipart/form-data">

その後、すべてがうまくいきました。

ありがとう。

于 2013-01-16T14:09:02.047 に答える