2011-02-03 5 views
6

ファイルをアップロードするように促すファイルアップローダーページを作成しようとしていて、進行状況を表示しながらアップロードします。ファイルのアップロードにPython/CGIを使用する方法

現時点では、私は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,) 

答えて

6

は、これはファイルのアップロードは、HTTPプロトコルでどのように機能するかを考えると、それはそうよりも複雑です。ほとんどのWebサーバーは、アップロードされたファイルが完全に転送されたときにのみCGIスクリプトを制御するので、その間にフィードバックを与える方法はありません。

しかし、この問題に取り組もうとしているPythonライブラリがあります。例:gp.fileupload(CGIではなくWSGIで動作します)。

トリックは、アップロードされたファイルを転送しながらAJAX経由でアップロードの進行状況を問い合わせる方法を提供することです。 Webサーバー(Apacheやnginxなど)がアップロードの進行状況をサポートするように設定されていない場合は、進捗バーに0〜100%のジャンプが表示されるため、これは役に立ちません。

Pluploadを試してみることをお勧めします。これはクライアント側で動作し、はるかに簡単です。

関連する問題