Created
October 12, 2020 10:08
-
-
Save muneneevans/0ab08971d701ded8101de8636be0fba8 to your computer and use it in GitHub Desktop.
Download zip file django
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import zipfile | |
import StringIO | |
from django.http import HttpResponse | |
def getfiles(request): | |
# Files (local path) to put in the .zip | |
# FIXME: Change this (get paths from DB etc) | |
filenames = ["/tmp/file1.txt", "/tmp/file2.txt"] | |
# Folder name in ZIP archive which contains the above files | |
# E.g [thearchive.zip]/somefiles/file2.txt | |
# FIXME: Set this to something better | |
zip_subdir = "somefiles" | |
zip_filename = "%s.zip" % zip_subdir | |
# Open StringIO to grab in-memory ZIP contents | |
s = StringIO.StringIO() | |
# The zip compressor | |
zf = zipfile.ZipFile(s, "w") | |
for fpath in filenames: | |
# Calculate path for file in zip | |
fdir, fname = os.path.split(fpath) | |
zip_path = os.path.join(zip_subdir, fname) | |
# Add file, at correct path | |
zf.write(fpath, zip_path) | |
# Must close zip for all contents to be written | |
zf.close() | |
# Grab ZIP file from in-memory, make response with correct MIME-type | |
resp = HttpResponse(s.getvalue(), mimetype = "application/x-zip-compressed") | |
# ..and correct content-disposition | |
resp['Content-Disposition'] = 'attachment; filename=%s' % zip_filename | |
return resp |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment