Я позаимствовал этот код для сохранения потока файлов на диск и работает, за исключением тех случаев, когда размер файла меньше 1kb. Я получаю эту ошибку:cStringIO.StringO не удается сохранить загруженный поток файлов, когда файл меньше 1kByte
in stuff_uploaded:
copy(theFile.file.name, './tmp/'+theFile.filename) #saves temporary file to /cp2/tmp/
AttributeError: объект «cStringIO.StringO» не имеет «имя» атрибут
@cherrypy.expose
@cherrypy.tools.noBodyProcess()
def stuff_uploaded(self, theFile=None):
import cgi
import tempfile
# convert the header keys to lower case
lcHDRS = {key.lower():val for key, val in cherrypy.request.headers.iteritems()}
class myFieldStorage(cgi.FieldStorage):
"""uses a named temporary file instead of the default non-named file; keeping it visibile (named), allows us to create a
2nd link after the upload is done, thus avoiding the overhead of making a copy to the destination filename."""
def make_file(self, binary=None):
return tempfile.NamedTemporaryFile()
formFields = myFieldStorage(fp=cherrypy.request.rfile,
headers=lcHDRS,
environ={'REQUEST_METHOD':'POST'},
keep_blank_values=True)
theFile = formFields['theFile']
# we now create a 2nd link to the file, using the submitted filename.
from shutil import copy
copy(theFile.file.name, './tmp/'+theFile.filename) #saves temporary file
msgs = csv_to_survey.match_fieldnames('./tmp/'+theFile.filename)
return './tmp/'+theFile.filename
Так что я могу сделать, чтобы гарантировать, что cStringIO.StringO обрабатывает небольшие загружаемые файлы ?
Получайте удовольствие от таких имен файлов, как '../../../ etc/passwd' ... –