2017-07-16 4 views
0

Ich habe einen Ordner pdfs unter static Ordner mit dem Namen.wie alle pdf-Dateien in einem statischen Ordner zip? django

Ich versuche, eine zurück Reißverschluss zu haben, die die pdf alle Dateien im pdfs Ordner enthält.

Ich habe ein paar Threads versucht, und ihre Codes verwendet, aber ich habe versucht zu trainieren Dinge, aber dann könnte den letzten Teil nicht lösen, dass ich eine Nachricht

Ich weiß, statische Ordner keine Datei/Verzeichnis zu sagen bekomme eine etwas anders als normale Ordner.

kann mir bitte jemand eine Hand geben und sehen, was ich verpasst haben?

Vielen Dank im Voraus

from StringIO import StringIO 
    import zipfile 

    pdf_list = os.listdir(pdf_path) 
    print('###pdf list################################') 
    print(pdf_path) # this does show me the whole path up to the pdfs folder 
    print(pdf_list) # returns ['abc.pdf', 'efd.pdf'] 

    zip_subdir = "somefiles" 
    zip_filename = "%s.zip" % zip_subdir 

    # Open StringIO to grab in-memory ZIP contents 
    s = StringIO() 

    # Grab ZIP file from in-memory, make response with correct MIME-type 
    resp = HttpResponse(content_type='application/zip') 
    # ..and correct content-disposition 
    resp['Content-Disposition'] = 'attachment; filename=%s' % zip_filename 

    # The zip compressor 
    zf = zipfile.ZipFile(s, "w") 
    for pdf_file in pdf_list: 
     print(pdf_file) 

     zf.write(pdf_file, pdf_path + pdf_file) 


    zf.writestr('file_name.zip', pdf_file.getvalue()) 
    zf.close() 

    return resp 

hier ich Fehler Datei/Verzeichnis für 'abc.pdf'

P. S. bin immer für nicht in der Lage zu finden Ich brauche keine Unterordner, die in die Zip-Datei gezippt werden. Solange alle Dateien in der Zip sind, wird alles gut. (Es wird keine Unterverzeichnisse im pdfs Ordner)

+0

nicht wirklich eine django Sache, so viel wie eine reine Python Sache. Vielleicht ein wenig der alten Schule im, aber ich würde nur so etwas wie: 'os.system ("zip -r -X% s /% s% s" % (zip_subdir, zip_filename "" .join (pdf_list)))' – Fallenreaper

+0

@Fallenreaper Wo sollte ich den von Ihnen angegebenen Code platzieren? – Tsuna

Antwort

0

ich es selbst gelöst und machte es in eine Funktion mit Kommentaren. komplizierte Dinge selbst früher

# two params 
# 1. the directory where files want to be zipped 
# e.g. of file directory is /et/ubuntu/vanfruits/vanfruits/static/pdfs/ 
# 2. filename of the zip file 
def render_respond_zip(self, file_directory, zip_file_name): 
    response = HttpResponse(content_type='application/zip') 
    response['Content-Disposition'] = 'attachment; filename=' + zip_file_name 

    # open a file, writable 
    zip = ZipFile(response, 'w') 

    # loop through the directory provided 
    for single_file in os.listdir(file_directory): 
     # open the file, full path to the file including file name and extension is needed as first param 
     f = open(file_directory + single_file, 'r') 

     # write the file into the zip with 
     # first param is the name of the file inside the zip 
     # second param is read the file 
     zip.writestr(single_file, f.read()) 

    zip.close() 

    return response 
Verwandte Themen