diff --git a/src/api/__init__.py b/src/api/__init__.py index 248fe24..67515cf 100644 --- a/src/api/__init__.py +++ b/src/api/__init__.py @@ -19,9 +19,11 @@ def create_api(): from .abl.user import user from .abl.playlist import playlist + from .abl.file import file app.register_blueprint(user, url_prefix='/api/user') app.register_blueprint(playlist, url_prefix='/api/playlist') + app.register_blueprint(file, url_prefix='/api/file') from .models import User, Playlist, PlaylistFile, File diff --git a/src/api/abl/file.py b/src/api/abl/file.py new file mode 100644 index 0000000..ee25e27 --- /dev/null +++ b/src/api/abl/file.py @@ -0,0 +1,42 @@ +from flask import Blueprint, request, jsonify, send_file +from ..models import File +from .. import db + +file = Blueprint('file', __name__) +FILE_DIR = './data/' + +@file.route('/', methods=['POST']) +def upload(): + files = request.files.getlist('file') + for file in files: + exists = db.session.query(File).filter(File.name == file.filename).first() + print(file) + if not exists: + file.save(FILE_DIR + file.filename) + new_file = File(name=file.filename, type=file.mimetype) + db.session.add(new_file) + + db.session.flush() + db.session.commit() + return jsonify({'message': 'File uploaded successfully'}) + +@file.route('/', methods=['GET']) +def list(): + files = db.session.query(File).all() + res = [] + for file in files: + res.append(file.as_dict()) + return jsonify(res) + +@file.route('/', methods=['GET']) +def load(file_id): + file = db.session.query(File).filter(File.id == file_id).first() + return send_file(('../../data/' + file.name), mimetype=file.type) + +@file.route('/', methods=['DELETE']) +def delete(file_id): + rows = db.session.query(File).filter(File.id == file_id).all() + for row in rows: + db.session.delete(row) + db.session.commit() + return jsonify(success=True) diff --git a/src/api/models.py b/src/api/models.py index 105f316..82405d5 100644 --- a/src/api/models.py +++ b/src/api/models.py @@ -10,7 +10,10 @@ class PlaylistFile(db.Model): class File(db.Model): id = db.Column(db.Integer, primary_key = True) name = db.Column(db.String(150)) - type = db.Column(db.String(15)) + type = db.Column(db.String(255)) # maximum length of mimetype + + def as_dict(self): + return {c.name: getattr(self, c.name) for c in self.__table__.columns} class Playlist(db.Model): id = db.Column(db.Integer, primary_key = True)