How to use Python/CGI for file uploading

限于喜欢 提交于 2019-12-30 04:47:04

问题


I'm trying to make a file uploader page that will prompt the user for a file and will upload while displaying progress.

At the moment I've managed to make a simple HTML page that can calls my python script. The python script will then get the file and upload in 1000 byte chunks.

I have two main problem (mainly due to be completely new to this):

1) I can't get the file size to calculate percentage 2) I don't know how to communicate between the server side python and whatever is in the page to update the progress status;presumably javascript.

Am I going about everything the wrong way? Or is there a solution to my woes?

Here is my python code:

#!/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,)

回答1:


This is more complex than it seems, given how file uploading works in the HTTP protocol. Most web servers will give control to the CGI script only when the uploaded file has been completely transferred, so there's no way to give feedback in the meanwhile.

There are some Python libraries that attempt to tackle this issue, though. For example: gp.fileupload (works with WSGI, not CGI).

The trick is to provide a way to query the upload progress via AJAX while still transferring the uploaded file. This is of no use if the web server (for example, Apache or nginx) is not configured to support the upload progress feature because you will probably see a 0% to 100% jump in the progress bar.

I suggest you try Plupload, which works on the client-side and is much simpler.



来源:https://stackoverflow.com/questions/4890820/how-to-use-python-cgi-for-file-uploading

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!