尝试将数据作为Excel加载时,我收到了IO请求数据读取错误。
def convert_to_excel(request):
field = forms.CharField()
try: data = field.clean(request.POST.get('exceldata', ''))
except: data = u''
response = render_to_response("spreadsheet.html", request= request, dictionary = locals())
filename = "%s%s.xls" % ("report_excel", datetime.datetime.today().strftime('%Y%m%d%H%M%S'))
response['Content-Disposition'] = 'attachment; filename='+filename
response['Content-Type'] = 'application/vnd.ms-excel; charset=utf-8'
return response
当数据低于150k时,它可以正常工作,但是较大的文件在大约200k时失败。我正在使用守护进程模式和Python / 2.7.3运行django 1.4 Apache / 2.2.22(Ubuntu)mod_wsgi / 3.3。
这在localhost中工作正常。我想这可能是wsgi与守护进程模式的问题或错误配置。有谁知道这个?
我得到的例外情况如下。
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 89, in get_response
response = middleware_method(request)
File "/usr/local/lib/python2.7/dist-packages/newrelic-1.2.1.265-py2.7.egg/newrelic/hooks/framework_django.py", line 191, in __call__
result = self.__wrapped(*args, **kwargs)
File "/home/core/mysite/src/task/tools/libs/pagination/middleware.py", line 8, in process_request
request.page = int(request.REQUEST.get('page', 1) )
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 166, in _get_request
self._request = datastructures.MergeDict(self.POST, self.GET)
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 180, in _get_post
self._load_post_and_files()
File "/usr/local/lib/python2.7/dist-packages/django/http/__init__.py", line 360, in _load_post_and_files
self._post, self._files = self.parse_file_upload(self.META, data)
File "/usr/local/lib/python2.7/dist-packages/django/http/__init__.py", line 320, in parse_file_upload
return parser.parse()
File "/usr/local/lib/python2.7/dist-packages/newrelic-1.2.1.265-py2.7.egg/newrelic/api/function_trace.py", line 82, in __call__
return self._nr_next_object(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/http/multipartparser.py", line 161, in parse
data = field_stream.read()
File "/usr/local/lib/python2.7/dist-packages/django/http/multipartparser.py", line 301, in read
out = ''.join(parts())
File "/usr/local/lib/python2.7/dist-packages/django/http/multipartparser.py", line 285, in parts
yield ''.join(self)
File "/usr/local/lib/python2.7/dist-packages/django/http/multipartparser.py", line 316, in next
output = self._producer.next()
File "/usr/local/lib/python2.7/dist-packages/django/http/multipartparser.py", line 449, in next
for bytes in stream:
File "/usr/local/lib/python2.7/dist-packages/django/http/multipartparser.py", line 316, in next
output = self._producer.next()
File "/usr/local/lib/python2.7/dist-packages/django/http/multipartparser.py", line 377, in next
data = self.flo.read(self.chunk_size)
File "/usr/local/lib/python2.7/dist-packages/django/http/__init__.py", line 384, in read
return self._stream.read(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 104, in read
result = self.buffer + self._read_limited(size - len(self.buffer))
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 92, in _read_limited
result = self.stream.read(size)
File "/usr/local/lib/python2.7/dist-packages/newrelic-1.2.1.265-py2.7.egg/newrelic/api/web_transaction.py", line 349, in read
data = self.__input.read(*args, **kwargs)
IOError: request data read error
答案 0 :(得分:3)
检查您的apache配置,看看是否可以找到LimitRequestBody
如果是这样,请将其更改为更大的数字,如果没有找到,请在您的网站配置下添加以下内容
LimitRequestBody 1024000000
另外,检查你的uwsgi的文件限制选项,用以下选项启动你的uwsgi:
uwsgi --limit-post 1024000000
这种错误是您的上传超过了您的apache / nginx / uwsgi max upload设置。我也注意到你可能没有使用uwsgi,limit request body和set LimitRequestBody to be a low value by default 可能有所帮助。