返回基于HTML表单数据的动态压缩文件(确认下载对话框?)



我有一个HTML表单,它的动作被设置为我的Python脚本,我在其中测试表单中选择了哪些复选框。根据这些信息,我使用脚本创建一个zip文件,其中包含与选中的复选框对应的文件。我需要尽可能简单地将这个动态压缩文件返回给用户。我认为确认下载对话框是最好的,但如果有其他被广泛接受的标准,我将洗耳恭听。主机服务器是支持Python的Apache,下面是我的脚本代码:

#!usr/bin/env python
from zipfile import *;
import cgi, cgitb, os, os.path, re, sys; cgitb.enable();
def main():
    form = cgi.FieldStorage();
    zipfile = ZipFile( "zipfiles.zip" );
    if( form.getvalue( "checkbox1" ) ):
        zip.write( "../files/file1.txt", "zipfile1.txt" );
    if( form.getvalue( "checkbox2" ) ):
        zip.write( "../files/file2.txt", "zipfile2.txt" );
    zip.close();
    print ('Content-Type:application/octet-stream; name="zipfiles.zip');
    print ('Content-Disposition:attachment; filename="zipfiles.zip');
if( __name__ == "__main__" ):
    main();

这段代码不工作,吐出一个内部服务器错误,所以请告诉我出了什么问题,我怎么能得到zipfiles.zip给用户。这只是我使用Python的第三天;因此,我对发生的事情知之甚少,所以请不要跳过任何你认为我可能知道的事情,因为我可能不知道。

谢谢你们,fake和SDilmac。下面是你给我指出的我缺少的代码。它仍然没有消除我的错误,但这与我们的主机服务器的suexec_log权限有关。

如果没有权限错误,下面是我非常确定的工作代码:

#!usr/bin/env python
from zipfile import *;
import cgi, cgitb; cgitb.enable();
def main():
    form = cgi.FieldStorage();
    with ZipFile( "zipfiles.zip" ) as zipFile:
        if( form.getvalue( "checkbox1" ) ):
            zip.write( "../files/file1.txt", "zipfile1.txt" );
        if( form.getvalue( "checkbox2" ) ):
            zip.write( "../files/file2.txt", "zipfile2.txt" );
    print ( 'Content-Type:application/octet-stream; name="zipfiles.zip"nn' );
    print ( 'Content-Disposition:attachment; filename="zipfiles.zip"nnn' );
    with open( zipFile, "rb" ) as zip:
        print( zip.read() );
if( __name__ == "__main__" ):
    main();

最新更新