【问题标题】:Need to get the uploaded file to my local PC需要将上传的文件上传到我的本地 PC
【发布时间】:2011-02-22 06:07:10
【问题描述】:

我创建了一个测试表单,要求用户输入名称并上传图像文件:

<html lang="en">
<head>
    <title>Testing image upload</title>
</head>
<body>
    <form action="/services/upload" method="POST" enctype="multipart/form-data">
    File Description: <input name='fdesc' type='text'><br>
    File name: <input type="file" name="fname"><br>
    <div><input type="submit"></div>
    </form>
</body>
</html>

我需要获取用户上传的文件并将其存储在我的本地 PC 上。这可以在 python 中完成吗?请告诉我。

【问题讨论】:

  • 抱歉出现错误,我的本地 PC 是指我们的开发服务器本身,上面提到的 html 文件已加载到该服务器上。是否可以获取文件并将其存储在 /tmp 或其他位置。
  • 你是如何使用 Python 的? mod_python、mod_wsgi、CGI 脚本还是别的什么?
  • 它和 apache 服务器,我正在使用 mod_python
  • 你能接受答案吗?谢谢

标签: python file upload file-upload


【解决方案1】:

mod_python 包含FieldStorage class,它允许您访问上传的表单数据。为了使用它,您需要在 Python 脚本中添加如下内容:

req.form = FieldStorage(req)
description = req.form['fdesc']

由于fdesc 是文本输入,description 将是一个字符串(更准确地说,StringField,您可以将其视为字符串)。

file_field = req.form['fname']

由于fname 是一个文件输入,file_field 将不是一个字符串(或StringField),而是一个允许您访问文件数据的Field 对象。属性file_field.file 是一个类似文件的对象,您可以使用它来读取文件的内容,例如:

for line in file_field.file:
    # process the line

例如,您可以使用它来将文件的数据复制到您选择的某个位置。

file_field.filename 是客户端提供的文件名。我链接到的文档中列出了其他有用的属性。

【讨论】:

  • 大卫,我无法让它工作,我认为我做错了,你能给我一些例子吗。
  • 我做到了。我的答案中有几行示例代码,我给你的链接中有更完整的示例。如果您已经完成了这些并且无法弄清楚为什么您的代码不起作用,请发布一个新问题(因为“为什么这不起作用”与“我该怎么做”是一个单独的问题),并确保包含您的代码和错误消息的详细信息。
【解决方案2】:

Maybie minimal http cgi upload recipe,它的 cmets 对你有帮助。

【讨论】:

    【解决方案3】:

    嘿,大卫,我成功了,我是这样做的:

    filename = request.FILES['fname']
    destination = open('%s/%s'%(/tmp/,fileName), 'wb+')
    for chunk in filename.chunks():
                destination.write(chunk)
    destination.close()
    
    file = open('%s/%s'%(/tmp/,fileName),"rb").read()
    

    感谢大家的帮助。

    【讨论】:

    • 如果没有其他人的答案足够,可以将您的代码作为答案发布,但您可能不应该像在回复其他人一样编写代码。
    猜你喜欢
    • 1970-01-01
    • 2015-07-20
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2022-11-10
    相关资源
    最近更新 更多