【问题标题】:How to use Python/CGI for file uploading如何使用 Python/CGI 进行文件上传
【发布时间】:2011-06-20 22:06:30
【问题描述】:

我正在尝试制作一个文件上传器页面,该页面将提示用户输入文件并在显示进度的同时上传。

目前,我已经设法制作了一个可以调用我的 python 脚本的简单 HTML 页面。然后,python 脚本将获取文件并以 1000 字节块的形式上传。

我有两个主要问题(主要是因为对这个完全陌生):

1) 我无法获取文件大小来计算百分比 2)我不知道如何在服务器端python和页面中的任何内容之间进行通信以更新进度状态;大概是javascript。

我是不是走错了路?或者有办法解决我的问题吗?

这是我的python代码:

#!/usr/local/bin/python2.5 
import cgi, os
import cgitb; cgitb.enable()

try:
    import msvcrt
    msvcrt.setmode (0, os.O_BINARY) 
    msvcrt.setmode (1, os.O_BINARY) 

except ImportError:
    pass

form = cgi.FieldStorage()
upload = form['file']

if upload.filename:
    name = os.path.basename(upload.filename)
    out = open('/home/oetzi/webapps/py/' + name, 'wb', 1000)
    message = "The file '" + name + "' was uploaded successfully"

    while True:
        packet = upload.file.read(1000)
        if not packet:
            break
        out.write(packet)
    out.close()
else:

message = "Derp... could you try that again please?"

print """\
Content-Type: text/html\n
<html><body>
<p>%s</p>
</body></html>
""" % (message,)

【问题讨论】:

    标签: javascript python html cgi


    【解决方案1】:

    考虑到文件上传在 HTTP 协议中的工作方式,这比看起来要复杂得多。大多数网络服务器只有在上传的文件完全传输完毕后才会将控制权交给CGI脚本,因此在此期间无法给出反馈。

    不过,有一些 Python 库试图解决这个问题。例如:gp.fileupload(适用于 WSGI,而非 CGI)。

    诀窍是提供一种通过 AJAX 查询上传进度的方法,同时仍传输上传的文件。如果 Web 服务器(例如 Apache 或 nginx)未配置为支持上传进度功能,这将毫无用处,因为您可能会在进度条中看到 0% 到 100% 的跳跃。

    我建议你试试Plupload,它在客户端工作并且简单得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-09
      • 2015-02-15
      • 2011-10-18
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      相关资源
      最近更新 更多