1

I have an HTML form whose action is set to my Python script in which I test which checkboxes were selected in the form. From this information, I use my script to create a zip file containing the files corresponding to the checked checkboxes. I need to give this dynamically zipped file back to the user as simply as possible. I figured that a confirm download dialog would be best, but if there's some other widely accepted standard, I'm all ears. The host server is Apache with Python supported, and here's my script code:

#!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();

This code does not work and spits out an Internal Server Error, so please explain to me what's going wrong and how I can get zipfiles.zip to the user. This is only my third day of using Python; therefore, I know very little about what's going on, so please don't skip over anything you think I might know because I probably don't.

Meloviz
  • 571
  • 6
  • 16
  • The code does not write body. – falsetru Aug 02 '15 at 07:08
  • `#! /usr/bin/python -u #what is binary mode import zipfile #clear namespace print ('Content-Type:application/zip; name="zipfiles.zip');#some header print #now write file obj` – dsgdfg Aug 02 '15 at 07:32

1 Answers1

0

Thank you, falsetru and SDilmac. Below is the code that I was missing which you pointed me to. It still didn't get rid of my error, but that had something to do with our host server's suexec_log permissions.

Here's the full write-up of what I'm pretty sure the working code would be if not for the permissions error:

#!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();
Meloviz
  • 571
  • 6
  • 16