def download(request, book_id): from utils.zfile import ZFile import os from django.conf import settings book = Book.objects.get(pk=int(book_id)) path = os.path.join(settings.MEDIA_ROOT, 'zipbooks') if not os.path.exists(path): os.makedirs(path) filename = os.path.join(path, str(book.id) + '.zip') f = ZFile(filename, 'w') if request.GET.get('onefile', ''): c = [] for o in book.chapter_set.all(): c.append(_get_content(book.id, path, o)) f.addstring(tools.to_encode(book.name) + '.txt', '\r\n\r\n'.join(c)) else: for o in book.chapter_set.all(): f.addstring(("%04d" % o.order)+'.txt', _get_content(book.id, path, o)) f.close() response = HttpResponse(mimetype='application/zip') response['Content-Disposition'] = 'attachment; filename=%s.zip' % tools.to_encode(book.name) response.write(file(filename, 'rb').read()) return response
def _get_content(book_id, path, o): if settings.CONTENT == 'db': return tools.to_encode(o.content, settings.OUTPUT_ENCODING) else: filename = os.path.join(path, str(book_id), "%04d.txt" % o.order) if os.path.exists(filename): try: f = file(filename, 'rb') text = f.read() f.close() return tools.to_encode(text, settings.OUTPUT_ENCODING) except: traceback.print_exc() return ''