45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
import os
|
|
import shutil
|
|
import uuid
|
|
|
|
import pkg_resources
|
|
from pyramid.response import FileResponse
|
|
from pyramid.security import authenticated_userid
|
|
from pyramid.view import view_config
|
|
import transaction
|
|
|
|
from soter.models import DBSession
|
|
|
|
from soter.models.master import Picture
|
|
|
|
|
|
@view_config(request_method='GET', route_name='upload', permission='Albums')
|
|
def html(request):
|
|
package, resource = 'soter:static/index.html'.split(':', 1)
|
|
file = pkg_resources.resource_filename(package, resource)
|
|
return FileResponse(file, request=request)
|
|
|
|
|
|
@view_config(request_method='POST', route_name='api_upload', renderer='json', permission='Albums')
|
|
def upload(request):
|
|
input_file = request.POST['file'].file
|
|
file_id = uuid.uuid4()
|
|
file_path = pkg_resources.resource_filename('soter', 'upload/' + str(file_id) + '.jpg')
|
|
album = request.POST['album']
|
|
temp_file_path = file_path + '~'
|
|
input_file.seek(0)
|
|
with open(temp_file_path, 'wb') as output_file:
|
|
shutil.copyfileobj(input_file, output_file)
|
|
os.rename(temp_file_path, file_path)
|
|
pic = Picture(file_id, str(file_id), uuid.UUID(authenticated_userid(request)), uuid.UUID(album), True, file_id)
|
|
DBSession.add(pic)
|
|
transaction.commit()
|
|
return {'location': file_path}
|
|
|
|
|
|
@view_config(request_method='GET', route_name='api_picture_id', permission='Albums')
|
|
def show_id(request):
|
|
package, resource = ('soter:upload/' + request.matchdict['id'] + '.jpg').split(':', 1)
|
|
file = pkg_resources.resource_filename(package, resource)
|
|
return FileResponse(file, request=request)
|