Heim  >  Artikel  >  Web-Frontend  >  Ausführliche Erläuterung des benutzerdefinierten FileField-Upload-Dateinamens

Ausführliche Erläuterung des benutzerdefinierten FileField-Upload-Dateinamens

巴扎黑
巴扎黑Original
2017-08-23 13:56:331781Durchsuche

Dieser Artikel führt Sie anhand von Beispielcode in das Problem des Hochladens von Dateinamen in benutzerdefinierten FileField ein.

Das Attribut upload_to in FileField kann das Speicherverzeichnis und den Namen der hochgeladenen Datei festlegen. Es kann eine Zeichenfolge oder ein aufrufbarer Wert sein, z. B. eine Methode.

Wenn der Wert von upload_to auf eine Methode festgelegt ist, kann der Name der hochgeladenen Datei geändert werden. Die Methode erfordert zwei Parameter, Instanz und Dateiname. Instanz ist die Modellinstanz, zu der das FileField gehört, und Dateiname ist der Name der hochgeladenen Datei.

Beispiel:


def user_directory_path(instance, filename):
 # file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
 return &#39;user_{0}/{1}&#39;.format(instance.user.id, filename)
class MyModel(models.Model):
 upload = models.FileField(upload_to=user_directory_path)

Wenn eine Klasse die __call__-Methode definiert, kann sie auch wie func aufgerufen werden, also der Wert von upload_to Es kann auch sei eine Klasse, die eine __call__-Methode definiert.

Um beispielsweise einen Zeitstempel zum Dateinamen basierend auf der Upload-Zeit hinzuzufügen:


import hashlib
import os
import time
from django.utils.deconstruct import deconstructible
@deconstructible
class TimeStampFileName(object):
 def __init__(self, path):
  self.path = os.path.join(path, "%s%s")
 def __call__(self, instance, filename):
  extension = os.path.splitext(filename)[1]
  data = "%s_%d"%(filename,int(time.time()))
  file_hash = hashlib.sha1(data).hexdigest()
  return self.path % (file_hash, extension)

Das FileField im Modell kann definiert werden als folgt:


class MyModel(models.Model):
 upload = models.FileField(upload_to=TimeStampFileName(&#39;media/&#39;), )

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des benutzerdefinierten FileField-Upload-Dateinamens. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn