【发布时间】: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