2010-09-01 118 views
3

我是新來的在python WSGI;但有一個安裝了isapi_wsgi的Windows服務器。我也有一個處理我的GET請求的腳本,並且運行良好。問題是,有人發給我一個請求,我需要將一個zip文件返回給請求者。下面的代碼是在我的GET處理程序和它的作品,但似乎並沒有像正確的方式返回zip文件:將文件返回給WSGI GET請求

# open zip file return it 
    fin = open(zOutFilename, "rb") 
    start_response("200 OK", [('Content-Type', 'application/zip')]) 
    return fin.read() 

的事情是,你正在返回一個「流」 - 這意味着你失去文件名(瀏覽器簡單地將它命名爲GET查詢的名稱),它看起來非常慢。

有沒有更好的方式來返回一個文件下載與wsgi然後這種方法?

在此先感謝

回答

10

直接從PEP 333摘自:

if 'wsgi.file_wrapper' in environ: 
    return environ['wsgi.file_wrapper'](filelike, block_size) 
else: 
    return iter(lambda: filelike.read(block_size), '') 

而且你可能想提供的文件名給客戶端的Content-Disposition頭。

+0

是的 - 這是我一直在尋找。它固定我的問題:

鰭=開放(zOutFilename, 「RB」) 大小= os.path.getsize(zOutFilename) start_response( 「200 OK」,[( '內容 - 類型', '應用程序/壓縮' ),('Content-length',str(size)),('Content-Disposition','attachment; filename ='+ finalModelName +'.zip')]) #返回整個文件 if'wsgi.file_wrapper 'in environ: return environ ['wsgi.file_wrapper'](fin,1024) else: return iter(lambda:fin.read(1024),'')

madigan 2010-09-02 00:20:57