Python Webpy上传文件,了解“在哪里”;imagename";来自

Python Webpy上传文件,了解“在哪里”;imagename";来自,python,file-upload,web.py,Python,File Upload,Web.py,使用web.py框架,我正在将文件上传到服务器上,工作正常。我的问题是,我不确定属性“filename”从何而来?以及它如何实际获取文件名。这起初是一本字典,不是吗? 我也读了一些web.py的文章,但没有找到任何相关的内容。 以下是我代码的一部分: class Upload(object): def GET(self): return render.upload_form() def POST(self): update_form = web.

使用web.py框架,我正在将文件上传到服务器上,工作正常。我的问题是,我不确定属性“filename”从何而来?以及它如何实际获取文件名。这起初是一本字典,不是吗? 我也读了一些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???

file_name=update_form.file.filename#上载文件时,需要使用内容类型。在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-- 发布/上传HTTP/1.1 主持人:example.org 内容类型:多部分/表单数据;边界 --某个边界 内容配置:表单数据;name=“name”;filename=“filename.txt” 内容类型:文本/纯文本 文件的内容。。。。 --某个边界--
name
是表单元素的名称,
filename
是原始文件名

web.py
如果在代码中使用dict作为默认值(请参见:),则将文件作为FieldStorage导入,以便以后可以查询这些信息。如果不使用默认值,文件内容将简单地存储为字符串


请注意,文件名是用户输入的,可以通过任何方式访问,因此需要对其进行清理!有人可以上传一个文件,如“
”。/../../some\u directory/some\u important\u file”
,这样可以覆盖或创建服务器进程具有访问权限的任何地方的文件。

上传文件时,需要使用内容类型。在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-- 发布/上传HTTP/1.1 主持人:example.org 内容类型:多部分/表单数据;边界 --某个边界 内容配置:表单数据;name=“name”;filename=“filename.txt” 内容类型:文本/纯文本 文件的内容。。。。 --某个边界--
name
是表单元素的名称,
filename
是原始文件名

web.py
如果在代码中使用dict作为默认值(请参见:),则将文件作为FieldStorage导入,以便以后可以查询这些信息。如果不使用默认值,文件内容将简单地存储为字符串


请注意,文件名是用户输入的,可以通过任何方式访问,因此需要对其进行清理!有人可以上传一个文件,比如
”。/../../some\u directory/some\u important\u file“
,这样可以在服务器进程有访问权限的任何地方覆盖或创建文件。

感谢您的解释和有用的建议!感谢您的解释和有益的建议!