Hallo.
Ich habe eine Upload Funktion für Profilfotos, Dateien, etc...
Beim Upload gebe ich diesen per Model-Funktion (uuid4) einen uniquen Dateinamen. Das funktioniert auch Alles einwandfrei.
Wenn ich nun allerdings die Datei downloade, dann habe ich diesen sehr unaussagekräftigen Namen im Download Ordner.
Gibt es eine Möglichkeit den Namen für den Download zu änder?
Mein Upload Model besteht aus den Feldern (description (z.b. Screenshot_15_08) , article (ForeignKey) und dem FileField
Im Optimalfall hat die Datei beim Download den namen description.XXX
Gibt es da einen einfachen Weg dies zu realisieren?
Danke schonmal im Voraus!
Django: File upload uuid4 aber Download mit lesbarem Dateinamen
@SnakeBite: Der Dateiname ergibt sich ja aus der URL. Normalerweise hat man daher URLs der Form: http://server/uploads/[uuid]/[description].jpg
Ja, das ist korrekt. Aber es gibt zweierlei Gründe warum ich dies gerne wie oben beschrieben machen würde.
1. Dem User ist für eine korrekte Bezeichnung der Dateinamen nicht zu vertrauen.
2. Ich will mehrere Dateien in einem Ordner. Daher würde ich gerne randomisierte Dateinamen verwenden.
Kennt denn jemand einen Weg dafür?
In den Docs gibt es ein ähnliches Beispiel, allerdings nur für eine Datei.
https://docs.djangoproject.com/en/dev/h ... tting-pdf/
Ich hätte aber lieber eine Model-Funktion, da ich auf einer Seite mehrere solcher Datei-Downloads anbieten möchte.
1. Dem User ist für eine korrekte Bezeichnung der Dateinamen nicht zu vertrauen.
2. Ich will mehrere Dateien in einem Ordner. Daher würde ich gerne randomisierte Dateinamen verwenden.
Kennt denn jemand einen Weg dafür?
In den Docs gibt es ein ähnliches Beispiel, allerdings nur für eine Datei.
https://docs.djangoproject.com/en/dev/h ... tting-pdf/
Code: Alles auswählen
def some_view(request):
# Create the HttpResponse object with the appropriate PDF headers.
response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"'
...
return response
@SnakeBite: Ad 1. Wo soll denn der Dateiname herkommen? Und ob Du das in der URL oder über den HTTP-Header machst, ist doch letztlich egal.
Ad 2. Der Name der Datei auf dem Server und der ”Name” in der URL oder im HTTP-Header sind doch unabhängig voneinander, darum verstehe ich den Punkt 2 nicht.
Ad 2. Der Name der Datei auf dem Server und der ”Name” in der URL oder im HTTP-Header sind doch unabhängig voneinander, darum verstehe ich den Punkt 2 nicht.
Könntest Du das bitte erkläutern? Das verstehe ich nicht.BlackJack hat geschrieben: Ad 2. Der Name der Datei auf dem Server und der ”Name” in der URL oder im HTTP-Header sind doch unabhängig voneinander, darum verstehe ich den Punkt 2 nicht.
Beispiel:
1. Ich habe eine Datei namens "frankfurt.pdf"
2. Diese lade ich auf meiner website hoch zu "/files/frankfurt.pdf".
3. Dann füge ich den Link dazu auf meiner Website ein, damit man die Datei herunterladen kann.
4. User lädt die Datei "frankfurt.pdf" herunter. Auf seinem PC heisst diese auch "frankfurt.pdf"
Was ich aber will:
1. Ich habe eine Datei namens "frankfurt.pdf"
2. Diese lade ich auf meiner website hoch zu "/files/jpo8jffi8werof89f8orfhworifj9348fhqfiejhfoiwef.pdf" mit der model.description = "Stadtführung für Frankfurt"
3. Dann füge ich den Link dazu auf meiner Website ein, damit man die Datei herunterladen kann.
4. User lädt die Datei "jpo8jffi8werof89f8orfhworifj9348fhqfiejhfoiwef.pdf" herunter. Auf seinem PC heisst diese jedoch "Stadtführung durch Frankfurt.pdf"
Ich bräuchte also irgendwo in dem Prozess die Möglichkeit zu sagen:
Neuer Filename = file.description + oldfile.extension (Das hier ist natürlich kein Python code, es geht lediglich um die Logik dahinter)
Ich habe leider keine Ahnung was das mit einem HTTP Header zu tun hat. Ich bin ein Noob.

@SnakeBite: Dann musst Du für die Webseite entweder einen Link generieren wo als letztes ”file.description + oldfile.extension” steht, wie von Sirius3 vorgeschlagen, oder Du musst halt wie Du das ja selber gezeigt hast, den Content-Disposition HTTP-Header entsprechend setzen.
- noisefloor
- User
- Beiträge: 4151
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Das von dir gezeigt Beispiel hat übrigens keine wirklichen Bezug zu deinem Problem, da dort eine PDF-Datei "on the fly" via ReportLab generiert und dann von Django ausgeliefert wird. Du lieferst ja statischen Content.
Gruß, noisefloor
Aber selbst, wenn du eine Seite mit X Download-Links hast, kannst der Nutzer der Seite doch immer nur _eine_ Datei auf einmal runter laden. D.h. du kannst grundsätzlich auch die Content-Disposition machen.Ich hätte aber lieber eine Model-Funktion, da ich auf einer Seite mehrere solcher Datei-Downloads anbieten möchte.
Das von dir gezeigt Beispiel hat übrigens keine wirklichen Bezug zu deinem Problem, da dort eine PDF-Datei "on the fly" via ReportLab generiert und dann von Django ausgeliefert wird. Du lieferst ja statischen Content.
Gruß, noisefloor