使用web.py框架我将文件上传到我的服务器with this solution并且工作正常。我的问题是,我不确定属性“文件名”来自何处?它是如何实际获取文件名的。这首先是一本字典,不是吗? 我还阅读了一些api reference的web.py,但没有发现任何相关内容。 以下是我的代码的一部分:
class Upload(object):
def GET(self):
return render.upload_form()
def POST(self):
update_form = web.input(file={})
file_dir = '/Users/admin/Developer/projects/pro/templates/img'
if 'file' in update_form:
file_name = update_form.file.filename
f_out = open(file_dir + '/' + file_name, 'w')
f_out.write(update_form.file.file.read())
f_out.close()
return self.GET()
请看行:
file_name = update_form.file.filename # <- What???
任何帮助将不胜感激,谢谢!
答案 0 :(得分:1)
上传文件时,您需要使用multipart/form-data
内容类型。在html表单中,您可以通过设置表单的enctype="multipart/form-data"
属性来完成此操作。对于文件输入,浏览器会自动将文件名添加到请求中。原始请求看起来像这样:
POST /upload HTTP/1.1 Host: example.org Content-Type: multipart/form-data; boundary=someboundary --someboundary Content-Disposition: form-data; name="name"; filename="filename.txt" Content-Type: text/plain content of the file .... --someboundary--
name
是表单元素的名称,filename
是原始文件名。
web.py
将文件导入为FieldStorage(请参阅:"Hang ups" here),以便您稍后可以查询这些信息。如果不使用默认值,则文件内容将简单地存储为字符串。
请注意文件名是用户输入的,可以是任何东西,因此需要进行清理!有人可以上传像"../../../some_directory/some_important_file"
这样的文件,像这样覆盖或创建文件服务器进程拥有访问权限的任何地方。