-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