2011-02-03 41 views
6

我正在嘗試創建一個文件上傳頁面,它將提示用戶輸入文件並在顯示進度時上傳。如何使用Python/CGI進行文件上傳

目前我已經設法制作一個簡單的HTML頁面,可以調用我的Python腳本。然後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,) 

回答

6

,這要複雜得多,似乎給定文件上傳的HTTP協議是如何工作的。只有當上傳的文件已經完全傳輸時,大多數網絡服務器纔會對CGI腳本進行控制,因此在此期間無法提供反饋。

雖然有一些Python庫試圖解決這個問題。例如:gp.fileupload(適用於WSGI,不適用於CGI)。

訣竅是提供一種方法來通過AJAX查詢上傳進度,同時仍然傳輸上傳的文件。如果Web服務器(例如Apache或nginx)未配置爲支持上載進度功能,則這是沒有用的,因爲您可能會在進度欄中看到0%到100%的跳轉。

我建議你試試Plupload,它在客戶端工作,更簡單。

相關問題