Описание проблемы:
Я столкнулся с проблемой при загрузке файлов в MinIO с использованием кода Python. Когда я загружаю файлы с помощью сценария Python, загруженные файлы появляются в корзине MinIO, но не имеют размера и не могут быть открыты. Однако когда я загружаю файлы вручную, они доступны для просмотра и имеют размер.
Что я пробовал:
Проверенные настройки сегмента MinIO: я подтвердили, что настройки сегмента MinIO верны и что как файлы, загруженные вручную, так и файлы, загруженные с помощью кода, хранятся в правильном сегменте.
Проверенный тип контента: я устанавливаю тип контента правильно использовать функцию get_content_type(), чтобы гарантировать правильное распознавание загруженных файлов.
Ожидаемый результат:
Я ожидаю, что файлы, загруженные через Python скрипт должен быть доступен для просмотра и иметь размер, аналогичный файлам, загруженным вручную.
from minio import Minio
from minio.error import S3Error
from flask import Flask, render_template, send_file
from flask_wtf import FlaskForm
from wtforms import FileField, SubmitField
from werkzeug.utils import secure_filename
import os
from wtforms.validators import InputRequired
import mimetypes
minio_client = Minio(endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG")
app = Flask(__name__)
app.config['SECRET_KEY'] = 'supersecretkey'
class UploadFileForm(FlaskForm):
file = FileField("File", validators=[InputRequired()])
submit = SubmitField("Upload File")
def get_content_type(filename):
content_type, _ = mimetypes.guess_type(filename)
if not content_type:
extension = os.path.splitext(filename)[1].lower()
if extension in ('.jpg', '.jpeg', '.png', '.gif', '.bmp'):
content_type = f'image/{extension.lstrip(".")}'
return content_type or 'application/octet-stream'
@app.route('/', methods=['GET', 'POST'])
@app.route('/home', methods=['GET', 'POST'])
def home():
form = UploadFileForm()
if form.validate_on_submit():
file = form.file.data
filename = secure_filename(file.filename)
bucket_name = "saving-files"
try:
content_type = get_content_type(filename)
minio_client.put_object(bucket_name, filename, file, file.content_length, content_type=content_type)
return "File has been uploaded to MinIO."
except S3Error as e:
return f"Error uploading file to MinIO: {e}"
return render_template('index.html', form=form)
@app.route('/files/', methods=['GET'])
def get_file(filename):
bucket_name = "saving-files"
try:
file_data = minio_client.get_object(bucket_name, filename)
return send_file(file_data, attachment_filename=filename)
except Exception as e:
return f"Error retrieving file from MinIO: {e}"
if __name__ == '__main__':
app.run(debug=True)
from minio import Minio
from minio.error import S3Error
from flask import Flask, render_template, send_file
from flask_wtf import FlaskForm
from wtforms import FileField, SubmitField
from werkzeug.utils import secure_filename
import os
from wtforms.validators import InputRequired
import mimetypes
minio_client = Minio(endpoint="play.min.io",
access_key="Q3AM3UQ867SPQQA43P2F",
secret_key="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG")
app = Flask(__name__)
app.config['SECRET_KEY'] = 'supersecretkey'
class UploadFileForm(FlaskForm):
file = FileField("File", validators=[InputRequired()])
submit = SubmitField("Upload File")
def get_content_type(filename):
content_type, _ = mimetypes.guess_type(filename)
if not content_type:
extension = os.path.splitext(filename)[1].lower()
if extension in ('.jpg', '.jpeg', '.png', '.gif', '.bmp'):
content_type = f'image/{extension.lstrip(".")}'
return content_type or 'application/octet-stream'
@app.route('/', methods=['GET', 'POST'])
@app.route('/home', methods=['GET', 'POST'])
def home():
form = UploadFileForm()
if form.validate_on_submit():
file = form.file.data
filename = secure_filename(file.filename)
bucket_name = "saving-files"
try:
content_type = get_content_type(filename)
minio_client.put_object(bucket_name, filename, file, file.content_length, content_type=content_type)
return "File has been uploaded to MinIO."
except S3Error as e:
return f"Error uploading file to MinIO: {e}"
return render_template('index.html', form=form)
@app.route('/files/', methods=['GET'])
def get_file(filename):
bucket_name = "saving-files"
try:
file_data = minio_client.get_object(bucket_name, filename)
return send_file(file_data, attachment_filename=filename)
except Exception as e:
return f"Error retrieving file from MinIO: {e}"
if __name__ == '__main__':
app.run(debug=True)
Подробнее здесь: https://stackoverflow.com/questions/782 ... python-app