mirror of
https://github.com/veops/cmdb.git
synced 2025-08-07 06:09:48 +08:00
前后端全面升级
This commit is contained in:
63
cmdb-api/api/views/common_setting/file_manage.py
Normal file
63
cmdb-api/api/views/common_setting/file_manage.py
Normal file
@@ -0,0 +1,63 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
import os
|
||||
|
||||
from flask import request, abort, current_app, send_from_directory
|
||||
from werkzeug.utils import secure_filename
|
||||
|
||||
from api.lib.common_setting.resp_format import ErrFormat
|
||||
from api.lib.common_setting.upload_file import allowed_file, generate_new_file_name
|
||||
from api.resource import APIView
|
||||
|
||||
prefix = '/file'
|
||||
|
||||
ALLOWED_EXTENSIONS = {
|
||||
'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'xls', 'xlsx', 'doc', 'docx', 'ppt', 'pptx', 'csv'
|
||||
}
|
||||
|
||||
|
||||
class FileExtensionAllowView(APIView):
|
||||
url_prefix = (f'{prefix}/allow_extensions',)
|
||||
|
||||
def get(self):
|
||||
extensions = current_app.config.get('ALLOWED_EXTENSIONS', ALLOWED_EXTENSIONS)
|
||||
extensions = list(extensions)
|
||||
return self.jsonify(extensions)
|
||||
|
||||
|
||||
class GetFileView(APIView):
|
||||
url_prefix = (f'{prefix}/<string:_filename>',)
|
||||
|
||||
def get(self, _filename):
|
||||
return send_from_directory(current_app.config['UPLOAD_DIRECTORY_FULL'], _filename, as_attachment=True)
|
||||
|
||||
|
||||
class PostFileView(APIView):
|
||||
url_prefix = (f'{prefix}',)
|
||||
|
||||
def post(self):
|
||||
# check if the post request has the file part
|
||||
if 'file' not in request.files:
|
||||
abort(400, ErrFormat.no_file_part)
|
||||
|
||||
file = request.files['file']
|
||||
|
||||
if not file:
|
||||
abort(400, ErrFormat.file_is_required)
|
||||
extension = file.mimetype.split('/')[-1]
|
||||
if file.filename == '':
|
||||
filename = f'.{extension}'
|
||||
else:
|
||||
if extension not in file.filename:
|
||||
filename = file.filename + f".{extension}"
|
||||
else:
|
||||
filename = file.filename
|
||||
|
||||
if allowed_file(filename, current_app.config.get('ALLOWED_EXTENSIONS', ALLOWED_EXTENSIONS)):
|
||||
filename = generate_new_file_name(filename)
|
||||
filename = secure_filename(filename)
|
||||
file.save(os.path.join(
|
||||
current_app.config['UPLOAD_DIRECTORY_FULL'], filename))
|
||||
|
||||
return self.jsonify(file_name=filename)
|
||||
|
||||
abort(400, 'Extension not allow')
|
Reference in New Issue
Block a user