upload, list and delete files

This commit is contained in:
grimhilt 2023-07-30 17:32:44 +02:00
parent 52513c10df
commit f5786a446f
3 changed files with 48 additions and 1 deletions

View File

@ -19,9 +19,11 @@ def create_api():
from .abl.user import user from .abl.user import user
from .abl.playlist import playlist from .abl.playlist import playlist
from .abl.file import file
app.register_blueprint(user, url_prefix='/api/user') app.register_blueprint(user, url_prefix='/api/user')
app.register_blueprint(playlist, url_prefix='/api/playlist') app.register_blueprint(playlist, url_prefix='/api/playlist')
app.register_blueprint(file, url_prefix='/api/file')
from .models import User, Playlist, PlaylistFile, File from .models import User, Playlist, PlaylistFile, File

42
src/api/abl/file.py Normal file
View File

@ -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('/<int:file_id>', 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('/<int:file_id>', 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)

View File

@ -10,7 +10,10 @@ class PlaylistFile(db.Model):
class File(db.Model): class File(db.Model):
id = db.Column(db.Integer, primary_key = True) id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(150)) 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): class Playlist(db.Model):
id = db.Column(db.Integer, primary_key = True) id = db.Column(db.Integer, primary_key = True)