From b603f40f18244631293197b51629e0b4365b3791 Mon Sep 17 00:00:00 2001 From: stef Date: Fri, 4 Nov 2011 18:06:48 +0100 Subject: [PATCH] [fix] #20 attachments are have proper names and mimetypes --- bt/models.py | 3 ++- bt/views.py | 11 ++++++++++- templates/view.html | 2 +- urls.py | 1 + 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/bt/models.py b/bt/models.py index b94cc1f..cc9e364 100644 --- a/bt/models.py +++ b/bt/models.py @@ -31,7 +31,7 @@ COUNTRIES = ( ('SK', _('Slovakia')), ('FI', _('Finland')), ('SE', _('Sweden')), - ('UK', _('United Kingdom ')), + ('UK', _('United Kingdom')), ) RESOURCES = ( @@ -91,6 +91,7 @@ class Comment(models.Model): class Attachment(models.Model): storage = models.FileField(upload_to='static') name= models.CharField(max_length=512) + type= models.CharField(max_length=512) comment = models.ForeignKey(Comment) class Admin: diff --git a/bt/views.py b/bt/views.py index 708f936..0f55156 100644 --- a/bt/views.py +++ b/bt/views.py @@ -3,6 +3,7 @@ from django.http import HttpResponse, HttpResponseRedirect, Http404 from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.core.files import File +from django.core.servers.basehttp import FileWrapper from django.conf import settings from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.core.exceptions import ObjectDoesNotExist @@ -163,7 +164,7 @@ def add(request): ) c.save() for f in request.FILES.getlist('attachments[]'): - a=Attachment(comment=c, name=f.name) + a=Attachment(comment=c, name=f.name, type=f.content_type) m = hashlib.sha256() for chunk in f.chunks(): m.update(chunk) @@ -229,6 +230,14 @@ def view(request,id): raise Http404 return render_to_response('view.html', { 'v': v, },context_instance=RequestContext(request)) +def get_attach(request,id): + f = get_object_or_404(Attachment, pk=id) + wrapper = FileWrapper(f.storage) + response=HttpResponse(wrapper, mimetype=f.type) + response['Content-Disposition'] = 'attachment; filename=%s' % f.name + response['Content-Length'] = f.storage.size + return response + def lookup(request): if request.method == 'GET': form = SearchViolation(request.GET) diff --git a/templates/view.html b/templates/view.html index 978157a..3b257ef 100644 --- a/templates/view.html +++ b/templates/view.html @@ -99,7 +99,7 @@ $(document).ready(function() { {% trans "Attachments" %} diff --git a/urls.py b/urls.py index 0d798e2..5cb014b 100644 --- a/urls.py +++ b/urls.py @@ -15,6 +15,7 @@ urlpatterns = patterns('', (r'^ajax/(?P[^/]*)(/(?P[^/]*))?$', bt.ajax), (r'^add/$', bt.add), (r'^view/(?P[0-9]*)$', bt.view), + (r'^attach/(?P[0-9]*)$', bt.get_attach), (r'^(?P[0-9]*)$', bt.view), (r'^rss/$', RssSiteNewsFeed()), (r'^atom/$', AtomSiteNewsFeed()), -- GitLab