-Lorsque vous créez un point de terminaison de téléchargement de fichier en utilisant django, la procédure pour placer l'objet fichier acquis dans MinIO (https://min.io/) tel quel --Mémorandum
--Environnement - python: v.3.7.7 - django: v.2.0.3 - minio: 5.0.13
Template --Préparer un modèle pour un téléchargement simple
{% extends 'base.html' %} //Chargez la base si nécessaire
{% block content %}
//La description du type de cryptage est requise pour le téléchargement de fichiers
<form method="POST" action="{% url 'upload_to_minio' %}" enctype="multipart/form-data">
{% csrf_token %}
//Entrée pour le téléchargement de fichiers
<p>
<label for="myfile">File:</label>
<input type="file" name="myfile" required id="myfile">
</p>
//Bouton de téléchargement
<button type=“submit”>télécharger</button>
</form>
{% endblock %}
urs.py --Définissez l'URL du point de terminaison de téléchargement
urlpatterns = [
path("umc/upload_to_minio/", views.UploadToMinio.as_view(), name="upload_to_minio"
]
views.py --Écrire la logique pour obtenir les informations sur le fichier téléchargé et les stocker dans MinIO
class UploadToMinio(generic.View, LoginRequiredMixin):
def post(self, request, *args, **kwargs):
try:
#Le fichier téléchargé est une demande.Stocké dans FILES
myfile = self.request.FILES['myfile']
#Lire les données binaires du fichier en mémoire
#Soyez prudent lorsque vous manipulez des fichiers volumineux
file_obj = myfile.read()
#Obtenir la taille du fichier
file_size = myfile.size
#Nom du compartiment de la destination de stockage
bucket_name = 'hoge'
#Nom de l'objet de destination de stockage
object_name = 'fuga'
# minio client
minioClient = Minio(
'host:port', #Destination d'accès MinIO
access_key='access_key', #Accès pour chaque environnement_key
secret_key='secret_key', #Secret de chaque environnement_key
secure=True) #Vrai pour la communication https
#Créer un bucket s'il n'existe pas
if not minioClient.bucket_exists(project_id):
minioClient.make_bucket(bucket_name=bucket_name)
#Créer un objet
minioClient.put_object(
bucket_name=project_id,
object_name=uuid,
data=io.BytesIO(file_obj),
length=file_size
)
--data
of put_object
accepte uniquement les objets qui héritent de ʻio.RawIOBase`. Par conséquent, ʻio.BytesIO () ʻest utilisé pour créer un flux binaire pour l'objet en mémoire.
Cela devrait fonctionner
Recommended Posts