1

使用 web.py 框架,我正在使用此解决方案将文件上传到我的服务器并且工作正常。我的问题是我不确定属性“文件名”来自哪里?以及它实际上是如何获取文件名的。这起初是一本字典,不是吗?我还阅读了 web.py 的一些api 参考,但没有找到任何相关内容。这是我的代码的一部分:

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???

任何帮助将不胜感激,谢谢!

4

1 回答 1

1

上传文件时,需要使用multipart/form-data内容类型。在 html 表单中,您可以通过设置enctype="multipart/form-data"表单的属性来执行此操作。对于文件输入,浏览器会自动将文件名添加到请求中。原始请求看起来像这样:

发布/上传 HTTP/1.1
主机:example.org
内容类型:multipart/form-data;边界=某个边界

——某个边界
内容处置:表单数据;名称=“名称”;文件名="文件名.txt"
内容类型:文本/纯文本

文件内容....

——某个边界——

name是表单元素的名称和filename原始文件名。

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

请注意,文件名是用户输入的,可以是任何内容,因此需要对其进行清理!有人可以上传"../../../some_directory/some_important_file"类似这样的文件,并在服务器进程有权这样做的任何地方覆盖或创建文件。

于 2013-06-22T16:09:45.363 回答