[PYTHON] Legen Sie die von django hochgeladene Datei in MinIO ab

Überblick

-Wenn Sie mit django einen Endpunkt zum Hochladen von Dateien erstellen, müssen Sie das erfasste Dateiobjekt unverändert in MinIO (https://min.io/) einfügen --Memorandum


Annahme

--Umgebung - python: v.3.7.7 - django: v.2.0.3 - minio: 5.0.13


Template

{% extends 'base.html' %} //Laden Sie gegebenenfalls die Basis
{% block content %}
//Die Enctype-Beschreibung ist für das Hochladen von Dateien erforderlich
<form method="POST" action="{% url 'upload_to_minio' %}" enctype="multipart/form-data">
    {% csrf_token %}
    //Eingabe für den Datei-Upload
    <p>
        <label for="myfile">File:</label>
        <input type="file" name="myfile" required id="myfile">    
    </p>
    //Schaltfläche Hochladen
    <button type=“submit”>hochladen</button>
</form>
{% endblock %}

urs.py

urlpatterns = [
    path("umc/upload_to_minio/", views.UploadToMinio.as_view(), name="upload_to_minio"
]

views.py --Schreiben Sie die Logik, um die hochgeladenen Dateiinformationen abzurufen und in MinIO zu speichern

class UploadToMinio(generic.View, LoginRequiredMixin):
    def post(self, request, *args, **kwargs):
        try:
            #Die hochgeladene Datei ist eine Anfrage.In DATEIEN gespeichert
            myfile = self.request.FILES['myfile']
            #Lesen Sie die Binärdaten der Datei in den Speicher
            #Seien Sie vorsichtig beim Umgang mit großen Dateien
            file_obj = myfile.read()
            #Dateigröße abrufen
            file_size = myfile.size

            #Bucket-Name des Speicherziels
            bucket_name = 'hoge'
            #Name des Speicherzielobjekts
            object_name = 'fuga'

            # minio client
            minioClient = Minio(
                'host:port', #MinIO-Zugriffsziel
                access_key='access_key', #Zugriff für jede Umgebung_key
                secret_key='secret_key', #Geheimnis jeder Umgebung_key
                secure=True) #True für die https-Kommunikation

            #Erstellen Sie einen Bucket, falls dieser nicht vorhanden ist
            if not minioClient.bucket_exists(project_id):
                minioClient.make_bucket(bucket_name=bucket_name)

            #Ein Objekt erstellen
            minioClient.put_object(
                bucket_name=project_id,
                object_name=uuid,
                data=io.BytesIO(file_obj),
                length=file_size
            )

--data in put_object akzeptiert nur Objekte, die von io.RawIOBase erben. Verwenden Sie daher "io.BytesIO ()", um einen Binärstrom für das Objekt im Speicher zu erstellen.


Das sollte funktionieren

Recommended Posts

Legen Sie die von django hochgeladene Datei in MinIO ab
Tauche ein in den Django Custom Befehl [1]
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei, indem Sie den Zeichencode angeben.
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑥ (statische Datei)
Laden Sie die von Google Colaboratory erstellte CSV-Datei herunter
[Django] Test zum Senden einer Datei per POST und Überprüfen des zurückgegebenen Kontexts [TDD]
Die von OpenCV ausgegebene AVI-Datei kann nicht abgespielt werden
[Jjango] Zeigt die Fehlermeldung an, die durch Auslösen von ValidationError angegeben wurde
Ich habe versucht, Pytest in die eigentliche Schlacht zu bringen
Spielen Sie, indem Sie den japanischen Dialektkorpus in eine Datenbank konvertieren. (8) Fügen Sie eine Konvertierungsfunktion für das Dateiformat hinzu