Example #1
0
    def post(self, request):
        data = request.POST
        user = request.user
        print data

        # Init variables
        album = 0
        valid = True
        photo_format_valid = True
        noticeText = ''
        noticeTitle = ''

        # Validate
        if data['photo_list'] == '[]':
            noticeText = u'未选择任何照片!'
            valid = False
        elif 'newalbum' in data:
            if not data['newalbumname']:
                noticeText = u'相册名不能为空!'
                valid = False
            elif Album.objects.filter(user=request.user,
                                      name=data['newalbumname']):
                noticeText = u'相册名已存在!'
                valid = False
            else:
                # Create new album
                album = Album.objects.create(
                    user=user,
                    name=data['newalbumname'],
                )
        else:
            # Select album
            album = Album.objects.filter(user=request.user,
                                         id=data['albumname'])
            if album:
                album = album[0]
            else:
                noticeText = u'未知错误:相册id:' + data['albumname']
                print 'Error album id = ' + data['albumname']
                valid = False

        if not valid:
            # Not valid with form
            noticeTitle = u'保存失败'
        else:
            # Create photos
            photo_list = json.loads(data['photo_list'])
            photo_list = set(photo_list)
            for name in photo_list:
                photo = Photo(
                    album=album,
                    name=name.split('.')[0],
                )

                if 'emotion' in data:
                    photo.emotion = data['emotion']

                if 'comment' in data:
                    photo.description = data['comment']

                # Save image source
                img = File(open('media/temp/' + name, 'rb'))
                hash_code = '_' + name.split('_')[-1] + '.'
                file_name = hash_code.join(name[:name.rfind('_')].split('.'))
                img.name = file_name
                photo.origin_source = img
                photo.source = img

                # PIL processing
                try:
                    img = Image.open('media/temp/' + name)
                except:
                    print 'Photo ' + name + ' created failed'
                    valid = False
                    photo_format_valid = False
                    noticeText = u'部分格式错误的照片上传失败!'
                    continue
                # Get shot date
                try:
                    exif = {
                        ExifTags.TAGS[k]: v
                        for k, v in img._getexif().items()
                        if k in ExifTags.TAGS
                    }
                    shot_date = datetime.strptime(exif['DateTime'],
                                                  '%Y:%m:%d %H:%M:%S')
                except:
                    shot_date = datetime.strptime('1970:01:01', '%Y:%m:%d')

                photo.shot_date = TIME_ZONE.localize(shot_date)

                try:
                    # Create thumb
                    img.thumbnail((480, 200), Image.ANTIALIAS)
                    img.save('media/temp/' + name + '.thumbnail', 'JPEG')
                    # Save thumb
                    img = File(open('media/temp/' + name + '.thumbnail', 'rb'))
                    img.name = file_name
                    photo.thumb = img
                    photo.origin_thumb = img
                except:
                    # Create thumb failed
                    print 'Photo ' + name + ' created failed'
                    valid = False
                    photo_format_valid = False
                    noticeText = u'部分格式错误的照片上传失败!'
                    continue

                photo.save()

            if not valid:
                # Upload error
                noticeTitle = u'警告'

        if not valid:
            # Upload fail
            if photo_format_valid:
                noticeType = 'warn'
            else:
                noticeType = 'info'
        else:
            # Upload success
            noticeType = 'success'
            noticeTitle = u'上传成功!'
            noticeText = ' '

        return HttpResponse(
            json.dumps({
                'noticeType': noticeType,
                'noticeTitle': noticeTitle,
                'noticeText': noticeText,
            }))
Example #2
0
    def post(self, request):
        data = request.POST
        user = request.user
        print data

        # Init variables
        album = 0
        valid = True
        photo_format_valid = True
        noticeText = ''
        noticeTitle = ''

        # Validate
        if data['photo_list'] == '[]':
            noticeText = u'未选择任何照片!'
            valid = False
        elif 'newalbum' in data:
            if not data['newalbumname']:
                noticeText = u'相册名不能为空!'
                valid = False
            elif Album.objects.filter(user=request.user, name=data['newalbumname']):
                noticeText = u'相册名已存在!'
                valid = False
            else:
                # Create new album
                album = Album.objects.create(
                        user=user,
                        name=data['newalbumname'],
                )
        else:
            # Select album
            album = Album.objects.filter(user=request.user, id=data['albumname'])
            if album:
                album = album[0]
            else:
                noticeText = u'未知错误:相册id:' + data['albumname']
                print 'Error album id = ' + data['albumname']
                valid = False

        if not valid:
            # Not valid with form
            noticeTitle = u'保存失败'
        else:
            # Create photos
            photo_list = json.loads(data['photo_list'])
            photo_list = set(photo_list)
            for name in photo_list:
                photo = Photo(
                        album=album,
                        name=name.split('.')[0],
                )

                if 'emotion' in data:
                    photo.emotion = data['emotion']

                if 'comment' in data:
                    photo.description = data['comment']

                # Save image source
                img = File(open('media/temp/' + name, 'rb'))
                hash_code = '_' + name.split('_')[-1] + '.'
                file_name = hash_code.join(name[:name.rfind('_')].split('.'))
                img.name = file_name
                photo.origin_source = img
                photo.source = img

                # PIL processing
                try:
                    img = Image.open('media/temp/' + name)
                except:
                    print 'Photo ' + name + ' created failed'
                    valid = False
                    photo_format_valid = False
                    noticeText = u'部分格式错误的照片上传失败!'
                    continue
                # Get shot date
                try:
                    exif = {
                        ExifTags.TAGS[k]: v
                        for k, v in img._getexif().items()
                        if k in ExifTags.TAGS
                        }
                    shot_date = datetime.strptime(exif['DateTime'], '%Y:%m:%d %H:%M:%S')
                except:
                    shot_date = datetime.strptime('1970:01:01', '%Y:%m:%d')

                photo.shot_date = TIME_ZONE.localize(shot_date)

                try:
                    # Create thumb
                    img.thumbnail((480, 200), Image.ANTIALIAS)
                    img.save('media/temp/' + name + '.thumbnail', 'JPEG')
                    # Save thumb
                    img = File(open('media/temp/' + name + '.thumbnail', 'rb'))
                    img.name = file_name
                    photo.thumb = img
                    photo.origin_thumb = img
                except:
                    # Create thumb failed
                    print 'Photo ' + name + ' created failed'
                    valid = False
                    photo_format_valid = False
                    noticeText = u'部分格式错误的照片上传失败!'
                    continue

                photo.save()

            if not valid:
                # Upload error
                noticeTitle = u'警告'

        if not valid:
            # Upload fail
            if photo_format_valid:
                noticeType = 'warn'
            else:
                noticeType = 'info'
        else:
            # Upload success
            noticeType = 'success'
            noticeTitle = u'上传成功!'
            noticeText = ' '

        return HttpResponse(json.dumps({
            'noticeType': noticeType,
            'noticeTitle': noticeTitle,
            'noticeText': noticeText,
        }))