diff --git a/src/c3nav/mapdata/api.py b/src/c3nav/mapdata/api.py index 69ed66a6..a2539cb1 100644 --- a/src/c3nav/mapdata/api.py +++ b/src/c3nav/mapdata/api.py @@ -1,11 +1,8 @@ import hashlib import json import mimetypes -import os from collections import OrderedDict -from django.conf import settings -from django.core.files import File from django.http import Http404, HttpResponse, HttpResponseNotModified from rest_framework.decorators import detail_route, list_route from rest_framework.response import Response @@ -156,9 +153,7 @@ class SourceViewSet(CachedReadOnlyViewSetMixin, ReadOnlyModelViewSet): def _image(self, request, name=None): source = self.get_object() response = HttpResponse(content_type=mimetypes.guess_type(source.name)[0]) - image_path = os.path.join(settings.MAP_ROOT, source.package.directory, 'sources', source.name) - for chunk in File(open(image_path, 'rb')).chunks(): - response.write(chunk) + response.write(source.image) return response diff --git a/src/c3nav/mapdata/migrations/0038_source_image.py b/src/c3nav/mapdata/migrations/0038_source_image.py new file mode 100644 index 00000000..5cabeb28 --- /dev/null +++ b/src/c3nav/mapdata/migrations/0038_source_image.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-05-01 14:41 +from __future__ import unicode_literals + +import os + +from django.conf import settings +from django.db import migrations, models + + +def save_images_to_db(apps, schema_editor): + Source = apps.get_model('mapdata', 'Source') + for source in Source.objects.all(): + image_path = os.path.join(settings.MAP_ROOT, source.package.directory, 'sources', source.name) + source.image = open(image_path, 'rb').read() + source.save() + + +class Migration(migrations.Migration): + dependencies = [ + ('mapdata', '0037_auto_20170428_0902'), + ] + + operations = [ + migrations.AddField( + model_name='source', + name='image', + field=models.BinaryField(default=b'', verbose_name='image data'), + preserve_default=False, + ), + migrations.RunPython(save_images_to_db), + ] diff --git a/src/c3nav/mapdata/models/source.py b/src/c3nav/mapdata/models/source.py index 1799702d..776ced00 100644 --- a/src/c3nav/mapdata/models/source.py +++ b/src/c3nav/mapdata/models/source.py @@ -12,6 +12,7 @@ class Source(MapItem): left = models.DecimalField(_('left coordinate'), max_digits=6, decimal_places=2) top = models.DecimalField(_('top coordinate'), max_digits=6, decimal_places=2) right = models.DecimalField(_('right coordinate'), max_digits=6, decimal_places=2) + image = models.BinaryField(_('image data')) # todo migrate to better storage class Meta: verbose_name = _('Source')