Files
2023-09-26 23:46:14 +02:00

115 lines
3.0 KiB
Python

# Import Flask's required binaries, helpers and request
from flask import request as FLrequest
from flask import render_template as FLrenTmpl
from flask import jsonify as FLstringify
from flask import Flask
# Import OS MKDIR
from os import mkdir as osMkdir
from os import remove as osRM
from os import listdir as osListDir
from fileObject import FileObject
def createDir() -> None:
try:
osMkdir('extFiles')
except:
pass
# General use file listing
def listDir() -> list[str]:
# Create custom data structure
fileProps: list[FileObject] = list()
# Parse it and prepare
for file in osListDir(f"extFiles"):
tmpObj = FileObject(file)
fileProps.append(tmpObj.__dict__())
# Return
return fileProps
# Initialize Flask binary
sfs: Flask = Flask(__name__)
# Prepare directories to be present
createDir()
# Register route on index GET/POST
@sfs.route('/', methods = ['GET', 'POST'])
def index():
if(FLrequest.method == 'POST'):
filePath: str = FLrequest.form.get('fileDel')
if(filePath is not None):
try:
# Remove the file
osRM(f"extFiles/{filePath}")
except:
pass
else:
fileList = FLrequest.files.getlist('inFile')
for file in fileList:
# Store the data on disk
file.save(f"extFiles/{file.filename}")
fileList = listDir()
return FLrenTmpl('index.html', fileItems = fileList, fileItemsLen = len(fileList))
# Register route on /api, GET
@sfs.route('/api', methods = ['GET'])
def apiGet():
# Get list of files
fileList: list[FileObject] = listDir()
# No file present
if(len(fileList) == 0):
return FLstringify({'status': False, 'filesLocalCount': 0})
# Any non-zero number of files present
else:
return FLstringify({'status': True, 'filesLocalCount': len(fileList), 'filesLocal': fileList})
# Register route on /api, PUT
@sfs.route('/api', methods = ['PUT'])
def apiPost():
# Upload file via API
if('inFile' not in FLrequest.files):
return FLstringify({'status': False, 'filesCount': 0 })
# Make RESTful API compatible with multiple files to be uploaded
fileList = FLrequest.files.getlist('inFile')
for file in fileList:
print(f"Uploading: {file.filename}")
# Upload the file to disk
file.save(f"extFiles/{file.filename}")
# Return success
return FLstringify({'status': True, 'filesCount': len(listDir())})
# Register route on /api, DELETE
@sfs.route('/api/<name>', methods = ['DELETE'])
def apiDelete(name: str):
try:
# Delete the file
osRM(f"extFiles/{name}")
# Return JSON
return FLstringify({'status': True, 'fileDel': f"/extFiles/{name}"})
# When file is not present
except FileNotFoundError:
return FLstringify({'status': False, 'HTTP': 404})
if __name__ == "__main__":
sfs.run(host='0.0.0.0')