0

この辺は初めてなので、単純なものが欠けている可能性があります。ユーザーがcsvドキュメントをアップロードして解析し、csvファイルのデータに基づいて他のアクションを実行できるアプリを作成しようとしています。

次の html を使用し て非常に基本的なフォームを設定します。

HTML

<html> 
    <head>
        <title>
            Paginator!
        </title>
    </head>

    <body>
        <form method="post">
            Enter name of page
            <br><input type="text" name="pagename">
            <br>
            Upload page info: <input type="file" name="csvfile" size="chars"><br>
            <input type="submit">
        </form>
    </body>
</html> 

Python コード:

import os
import csv
import webapp2

with open('index.html', 'rb') as f:
    HTML = f.read()
    print HTML

class MainPage(webapp2.RequestHandler):

    def get(self):
        self.response.headers['Content-Type'] = 'text/html'
        self.response.write(HTML)

    def post(self):
        self.response.write(self.request.get('pagename'))
        in_file = self.request.get('csvfile')

        if in_file:
            with open(in_file, 'rb') as f:
                csvreader = csv.reader(f, delimiter=',')
                data = [row for row in csvreader]

app = webapp2.WSGIApplication([('/', MainPage)],
                              debug=True)

そこで、フォーム情報を含む HTML ファイルを読み込み、GET リクエストがあったときにそれをページに書き込みます/

POST リクエストを処理しようとすると、問題が発生します。[Choose File] ボタンを使用して何かをアップロードしようとすると、GoogleApp Engine から No such File エラーが発生します。

エラーメッセージ:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1535, in __call__
    rv = self.handle_exception(request, response, e)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1529, in __call__
    rv = self.router.dispatch(request, response)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "C:\Users\Chris\Documents\Code\Python\iqm segmetizer\index.py", line 20, in post
    with open(in_file, 'rb') as f:
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py", line 610, in __init__
    super(FakeFile, self).__init__(filename, mode, bufsize, **kwargs)
IOError: [Errno 2] No such file or directory: u'test_page_info.csv'

ユーザー (この場合は自分自身) がフォームから csv ファイルをアップロードできるようにするには、どうすればよいですか?

4

1 に答える 1

1

最初にフォームに追加enctype="multipart/form-data"します。

<form method="post" enctype="multipart/form-data">
        Enter name of page
        <br><input type="text" name="pagename">
        <br>
        Upload page info: <input type="file" name="csvfile" size="chars"><br>
        <input type="submit">
</form>

これにより、ブラウザがサーバーにアップロードするファイルを正しくエンコードすることが保証されます。

次に、 BlobstoreBlobReaderを使用するように Python コードを変更します。

import csv
from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
  def post(self):
    upload_files = self.get_uploads('csvfile')
    blob_info = upload_files[0]
    blob_reader = blobstore.BlobReader(blob_info.key())
    csv_data = blob_reader.read()
    csv_reader = csv.reader(csv_data)
    ...
于 2013-04-15T06:24:18.007 に答える