[PYTHON] Mettez le fichier téléchargé par django dans MinIO

Aperçu

-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


supposition

--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

Mettez le fichier téléchargé par django dans MinIO
Plongez dans la commande Django Custom [1]
Lisez le fichier ligne par ligne avec Python
Lisez le fichier ligne par ligne avec Python
Lisez le fichier en spécifiant le code de caractère.
Résumé du tutoriel Django pour les débutants par les débutants ⑥ (fichier statique)
Téléchargez le fichier csv créé par Google Colaboratory
[Django] Test pour envoyer un fichier par POST et vérifier le contexte retourné [TDD]
La sortie du fichier avi par OpenCV ne peut pas être lue
[Jjango] Afficher le message d'erreur spécifié par lever ValidationError
J'ai essayé de mettre Pytest dans la bataille réelle
Jouez en convertissant le corpus de dialectes japonais en DB (8) Ajoutez une fonction de conversion de format de fichier