接受web.py应用程序中的大文件

时间:2012-08-16 19:44:17

标签: apache file-upload large-files web.py

我正在构建一个内部webapp来处理DNA序列数据。我需要能够接受多个序列的压缩文件,这些文件通常大于30MB,可以大到80MB。

我已遵循过去用于文件上传的模式:

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文件发布到网络表单时,我会遇到奇怪的行为。有时上传将达到约30%然后重新启动。有时单次尝试后上传将失败。在所有尝试中,上传永远不会完成,我最终得到“网页不可用”错误。

我的预感是,在某个地方,我需要告诉网站在上传过程中保持连接活动,即使这需要很长时间。到目前为止,我还没有找到如何控制它。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我在传输了一定数量的块后运行的代码中出现错误。在我的应用程序上配置web.py和apache的方式(我不认为我使用奇怪的配置)如果在客户端完成文件上载之前在应用程序中发生错误,则会导致奇怪的行为。特别是,如果发生错误,浏览器会尝试再次上传文件,而不是显示典型的“内部服务器错误”页面,直到它放弃为止。

由于我正在记录的众多步骤和状态,错误消息被隐藏在日志中。经过仔细研究后,我终于遇到了这个问题。