button to download all files as zip archive
authorCezary Czaplewski <czarek@chem.univ.gda.pl>
Tue, 20 Aug 2019 20:47:10 +0000 (22:47 +0200)
committerCezary Czaplewski <czarek@chem.univ.gda.pl>
Tue, 20 Aug 2019 20:47:10 +0000 (22:47 +0200)
django_simple/todo/templates/details.html
django_simple/todo/templates/details1.html
django_simple/todo/urls.py
django_simple/todo/views.py

index 28e640e..36e8e63 100644 (file)
@@ -369,6 +369,12 @@ Created {{ task.created_date  }}
                            <a href="/myfiles/list/{{task.jobdirname}}/">
                            {{ task.jobdirname }}
                            </a>
+                           {% if task.done %}
+                           &nbsp;
+                           <a class="btn btn-default"
+                            href="/{{task.id}}/all.zip">
+                            Download as zip</a>
+                            {% endif %}
                            </div>
                        </li>           
 
index e3135c8..eec9c50 100644 (file)
@@ -358,6 +358,12 @@ Created {{ task.created_date  }}
                            <a href="/myfiles/list/{{task.jobdirname}}/">
                            {{ task.jobdirname }}
                            </a>
+                           {% if task.done %}
+                           &nbsp;
+                           <a class="btn btn-default"
+                            href="/{{task.id}}/all.zip">
+                            Download as zip</a>
+                            {% endif %}
                            </div>
                        </li>           
 
index fd3c4f1..5543e47 100644 (file)
@@ -23,4 +23,5 @@ urlpatterns = [
         url(r'^details1/(?P<user_id>\w+)/(?P<task_id>\d+)/$', views.details1,name='details1'),        
         url(r'^details1/(?P<user_id>\w+)/(?P<task_id>\d+)/restart/$', views.restart1,name='restart1'),        
        url(r'^delete/(?P<task_id>\d+)/$', views.delete),
+       url(r'(?P<task_id>\d+)/all.zip$', views.zip_all_files), 
 ]
index 1157bfa..cddfc88 100644 (file)
@@ -1161,3 +1161,24 @@ def refresh_done0(task):
 
     
       return  
+
+@login_required
+def zip_all_files(request, task_id):
+    import os, zipfile
+    from django.http import HttpResponse
+    from wsgiref.util import FileWrapper
+    from django.core.files.temp import NamedTemporaryFile
+
+    task = get_object_or_404(Task, id=task_id)
+
+    temp=NamedTemporaryFile()
+    archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
+    for (dirpath, dirnames, filenames) in os.walk(task.jobdirname):
+       for file1 in filenames:
+         archive.write(dirpath+"/"+file1,file1)
+    archive.close()
+    temp.seek(0)
+    wrapper = FileWrapper(temp)
+    response = HttpResponse(wrapper, content_type='application/zip')
+    response['Content-Disposition'] = 'attachment; filename=all.zip'
+    return response