Commit 29a31a64d583118f2c94ee834dd7089b8f401e44
1 parent
5c581c0b
Exists in
master
and in
3 other branches
Adding file link download
Showing
3 changed files
with
34 additions
and
1 deletions
Show diff stats
file_link/models.py
file_link/urls.py
file_link/views.py
1 | 1 | from django.shortcuts import get_object_or_404, redirect, render |
2 | +from django.http import HttpResponse | |
3 | +from os import path | |
2 | 4 | from django.views import generic |
3 | 5 | from django.contrib import messages |
4 | 6 | from django.core.urlresolvers import reverse, reverse_lazy |
... | ... | @@ -14,6 +16,36 @@ from pendencies.forms import PendenciesForm |
14 | 16 | from .forms import FileLinkForm |
15 | 17 | from .models import FileLink |
16 | 18 | |
19 | +class DownloadFile(LoginRequiredMixin, generic.DetailView): | |
20 | + login_url = reverse_lazy("users:login") | |
21 | + redirect_field_name = 'next' | |
22 | + | |
23 | + model = FileLink | |
24 | + | |
25 | + def dispatch(self, request, *args, **kwargs): | |
26 | + slug = self.kwargs.get('slug', '') | |
27 | + file_link = get_object_or_404(FileLink, slug = slug) | |
28 | + | |
29 | + if not has_resource_permissions(request.user, file_link): | |
30 | + return redirect(reverse_lazy('subjects:home')) | |
31 | + | |
32 | + return super(DownloadFile, self).dispatch(request, *args, **kwargs) | |
33 | + | |
34 | + def render_to_response(self, context, **response_kwargs): | |
35 | + slug = self.kwargs.get('slug', '') | |
36 | + file_link = get_object_or_404(FileLink, slug = slug) | |
37 | + | |
38 | + response = HttpResponse(open(file_link.file_content.path, 'rb').read()) | |
39 | + response['Content-Type'] = 'application/force-download' | |
40 | + response['Pragma'] = 'public' | |
41 | + response['Expires'] = '0' | |
42 | + response['Cache-Control'] = 'must-revalidate, post-check=0, pre-check=0' | |
43 | + response['Content-Disposition'] = 'attachment; filename=%s' % file_link.name | |
44 | + response['Content-Transfer-Encoding'] = 'binary' | |
45 | + response['Content-Length'] = str(path.getsize(file_link.file_content.path)) | |
46 | + | |
47 | + return response | |
48 | + | |
17 | 49 | class CreateView(LoginRequiredMixin, generic.edit.CreateView): |
18 | 50 | login_url = reverse_lazy("users:login") |
19 | 51 | redirect_field_name = 'next' | ... | ... |