Return 基于 HTML 表单数据的动态压缩文件(确认下载对话框?)
Return Dynamically Zipped File Based On HTML Form Data (Confirm Download Dialog?)
我有一个 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 的第三天;因此,我对正在发生的事情知之甚少,所以请不要跳过任何你认为我可能知道的事情,因为我可能不知道。
谢谢你,faltru 和 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();
我有一个 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 的第三天;因此,我对正在发生的事情知之甚少,所以请不要跳过任何你认为我可能知道的事情,因为我可能不知道。
谢谢你,faltru 和 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();