2012-08-16 18 views
1

我正在構建一個內部webapp來處理DNA序列數據。我需要能夠接受一個通常大於30MB並且可以大到80MB的多個序列的壓縮文件。接受web.py應用程序中的大文件

我跟着我已經在過去用於文件上傳模式:

class ABIUploadHanlder(Handler): 
    def POST(self): 
     x = web.input(abifile = {}) 
     filedir = '/usr/local/www/wsgi-scripts' 
     if 'seqfile' in x: 
      time_key = str(time.time()).replace('.','') 

      filepath=x.seqfile.filename.replace('\\','/') 
      filename = time_key + 'abizipped.zip' 

      filetype = filename.split('.')[-1] 
      if filetype == 'zip': 
       pass 
      else: 
       raise web.seeother('/export?err=type') 
      fout = open(filedir +'/uploads/'+ filename,'w') 
      fout.write(x.seqfile.file.read()) 
      fout.close() 

     raise web.seeother('/abiprocess') 

當我發佈一個30MB文件到Web表單,我得到奇怪的行爲。偶爾上傳會達到大約30%,然後重新啓動。有時上傳會在一次嘗試後失敗。在所有嘗試上傳永遠不會完成,我最終得到一個「網頁不可用」的錯誤。

我的預感是,我需要告訴網站在上傳過程中保持連接的活躍狀態,即使這需要很長時間。到目前爲止,我還沒有找到如何控制這個問題。

任何幫助表示讚賞。

+0

你的應用程序是如何部署的,它在apache mod_wsgi下運行? – 2012-08-17 07:42:26

+0

它在Apache mod_wsgi上。 – Sevenless 2012-08-17 14:05:05

+0

也許你對web服務器配置中的超時或上傳大小有限制,你有檢查嗎?當您使用集成Web服務器在本地運行您的web.py應用程序時會發生嗎? – 2012-08-18 17:47:18

回答

0

我在發送一定數量的組塊後運行的代碼中出錯。在客戶端完成文件上傳之前,如果在應用程序中發生錯誤,則在我的應用程序上配置web.py和apache的方式(並且我認爲我沒有使用奇怪的配置)會導致出現奇怪的行爲。特別是,如果瀏覽器發生錯誤,而不是顯示典型的「內部服務器錯誤」頁面,則會嘗試再次上傳文件,循環播放直到放棄。

由於我正在記錄的許多步驟和狀態,錯誤消息被埋在日誌中。我經過仔細審閱後終於遇到了這個問題。

相關問題