upload, list and delete files
This commit is contained in:
parent
52513c10df
commit
f5786a446f
@ -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
42
src/api/abl/file.py
Normal 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)
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user