Я хочу сохранить файл из службы Flask в Minio Bucket, не сохраняя его сначала в каталоге. Пока что я могу сделать так, чтобы пользователь загрузил файл с помощью службы Flask, сохранил его в каталоге, а затем использовал функцию put_object
из Minio для его загрузки. Возможно ли что-то подобное?
Ниже вы можете увидеть метод upload_file
flask и метод upload_object
, который использует функцию put_object
из Minio:
UPLOAD_FOLDER = 'uploads'
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', '7z', 'iso'}
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/', methods=['GET','POST'])
def upload_file():
if request.method == 'POST':
# check if the post request has the file part
if 'file' not in request.files:
flash('No file part')
return 'No file found'
file = request.files['file']
# if user does not select file, browser also
# submit an empty part without filename
if file.filename == '':
flash('No selected file')
return 'msg error'
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save('uploads/'+filename)
print(file.filename)
# upload file to minio service
upload_object(name=str(file.filename))
return 'object stored in bucket'
return '''
<!doctype html>
<title>Upload IPS File</title>
<h1>Upload IPS File</h1>
<form method=post enctype=multipart/form-data>
<input type=file name=file>
<input type=submit value=Upload>
</form>
'''
И upload_object()
:
def upload_object(name):
try:
path = 'uploads/'+str(name)
print(path)
file_data = open(path, 'rb')
print(file_data)
file_stat = os.stat('uploads/'+str(name))
print(minioClient.put_object('miniotestbucket', str(name), file_data, file_stat.st_size))
except ResponseError as e:
print(e)
except FileNotFoundError as e:
print(e)
Я уже проверял это Вопрос , но я не совсем понял, что нужно было сделать.