【问题标题】:How to upload and read file in App Engine如何在 App Engine 中上传和读取文件
【发布时间】:2014-08-04 14:22:24
【问题描述】:

我有一个上传 html 表单:

<form method="post" enctype="multipart/form-data" action="{{ upload_url }}">
    <input type="file" id="import_groups_csv" name="import_groups_csv">
    <input type="submit" value="Import groups">
</form>

这是从 blobstore 读取文件的类:

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
    def post(self):
        upload_files = self.get_uploads('import_groups_csv')  # 'file' is file upload field in the form
        blob_info = upload_files[0]
        file = blobstore.get(blob_info.key()).open().read()
        for line in file:
            logging.info("line *******************"+str(line))
        self.redirect('/groups')

上传文件后,我想读取其中的每一行,但我的 git 已经出现错误,这是回溯:

INFO     2014-08-04 13:47:04,252 views.py:332] line *******************ERROR    2014-08-04 13:47:04,255 traceback.py:13] Traceback (most recent call last):

ERROR    2014-08-04 13:47:04,256 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\app_logging.py", line 78, in emit

ERROR    2014-08-04 13:47:04,256 traceback.py:13]     logservice.write(message)

ERROR    2014-08-04 13:47:04,256 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\logservice\logservice.py", line 347, in write

ERROR    2014-08-04 13:47:04,256 traceback.py:13]     logs_buffer().write(message)

ERROR    2014-08-04 13:47:04,256 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\logservice\logservice.py", line 236, in write

ERROR    2014-08-04 13:47:04,256 traceback.py:13]     return self._lock_and_call(self._write, line)

ERROR    2014-08-04 13:47:04,256 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\logservice\logservice.py", line 157, in _lock_and_call

ERROR    2014-08-04 13:47:04,256 traceback.py:13]     return method(*args)

ERROR    2014-08-04 13:47:04,256 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\logservice\logservice.py", line 253, in _write

ERROR    2014-08-04 13:47:04,256 traceback.py:13]     self._autoflush()

ERROR    2014-08-04 13:47:04,256 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\logservice\logservice.py", line 321, in _autoflush

ERROR    2014-08-04 13:47:04,256 traceback.py:13]     self._flush()

ERROR    2014-08-04 13:47:04,256 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\logservice\logservice.py", line 307, in _flush

ERROR    2014-08-04 13:47:04,256 traceback.py:13]     apiproxy_stub_map.MakeSyncCall('logservice', 'Flush', request, response)

ERROR    2014-08-04 13:47:04,256 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apiproxy_stub_map.py", line 94, in MakeSyncCall

ERROR    2014-08-04 13:47:04,256 traceback.py:13]     return stubmap.MakeSyncCall(service, call, request, response)

ERROR    2014-08-04 13:47:04,257 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apiproxy_stub_map.py", line 320, in MakeSyncCall

ERROR    2014-08-04 13:47:04,257 traceback.py:13]     rpc.CheckSuccess()

ERROR    2014-08-04 13:47:04,257 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apiproxy_rpc.py", line 156, in _WaitImpl

ERROR    2014-08-04 13:47:04,257 traceback.py:13]     self.request, self.response)

ERROR    2014-08-04 13:47:04,257 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apiproxy_stub.py", line 123, in MakeSyncCall

ERROR    2014-08-04 13:47:04,257 traceback.py:13]     method(request, response, request_id)

ERROR    2014-08-04 13:47:04,257 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\logservice\logservice_stub.py", line 182, in _Dynamic_Flush

ERROR    2014-08-04 13:47:04,257 traceback.py:13]     self._insert_app_logs(request_id, group.log_line_list())

ERROR    2014-08-04 13:47:04,257 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\apiproxy_stub.py", line 160, in WrappedMethod

ERROR    2014-08-04 13:47:04,259 traceback.py:13]     return method(self, *args, **kwargs)

ERROR    2014-08-04 13:47:04,259 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\logservice\logservice_stub.py", line 193, in _insert_app_logs

ERROR    2014-08-04 13:47:04,259 traceback.py:13]     '(?, ?, ?, ?)', new_app_logs)

ERROR    2014-08-04 13:47:04,259 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\logservice\logservice_stub.py", line 190, in <genexpr>

ERROR    2014-08-04 13:47:04,259 traceback.py:13]     for log_line in log_lines)

ERROR    2014-08-04 13:47:04,259 traceback.py:13]   File "C:\Program Files (x86)\Google\google_appengine\google\appengine\api\logservice\logservice_stub.py", line 200, in _tuple_from_log_line

ERROR    2014-08-04 13:47:04,259 traceback.py:13]     message = message.decode('utf-8')

ERROR    2014-08-04 13:47:04,259 traceback.py:13]   File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode

ERROR    2014-08-04 13:47:04,259 traceback.py:13]     return codecs.utf_8_decode(input, errors, True)

ERROR    2014-08-04 13:47:04,259 traceback.py:13] UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 27: invalid start byte

ERROR    2014-08-04 13:47:04,259 app_logging.py:82] Logged from file views.py, line 332

我已经按照谷歌开发者中的规定进行了操作,但它的文档记录很差。知道根本原因吗?

【问题讨论】:

  • 我认为self.get_uploads 实际上将上传的文件写入 blobstore?你能登录它的blob_info.key() 来确定吗? view.py 中的第 332 行是哪一行?如果您的模板文件保存为 UTF-8 格式?
  • @GAEfan:我已经记录了str(blob_info.key()) 给了我这个:ifeaztEIMug6_bJzv9sNpw==,我的意见文件中的第 332 行是self.redirect('/groups')

标签: python google-app-engine blobstore


【解决方案1】:

把它放在你的views.py的第一行:

# -*- coding: utf-8 -*-

并且,确保views.py 以UTF-8 格式保存。根据您的文本编辑器,转到另存为,并确保它是 Unicode,而不是 ASCII。

【讨论】:

    猜你喜欢
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多