Webpy上传文件,了解“imagename”来自哪里?

时间:2013-06-21 16:33:23

标签: python file-upload web.py

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

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

1 个答案:

答案 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是原始文件名。

如果您在代码中使用dict作为默认值,请

web.py将文件导入为FieldStorage(请参阅:"Hang ups" here),以便您稍后可以查询这些信息。如果不使用默认值,则文件内容将简单地存储为字符串。

请注意文件名是用户输入的,可以是任何东西,因此需要进行清理!有人可以上传像"../../../some_directory/some_important_file"这样的文件,像这样覆盖或创建文件服务器进程拥有访问权限的任何地方。