我有一个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的第三天。因此,我对所发生的事情了解得很少,所以请不要跳过您认为我可能知道的任何事情,因为我可能不知道。
谢谢falsetru和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"\n\n' );
print ( 'Content-Disposition:attachment; filename="zipfiles.zip"\n\n\n' );
with open( zipFile, "rb" ) as zip:
print( zip.read() );
if( __name__ == "__main__" ):
main();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句