Maison > interface Web > js tutoriel > Explication détaillée du nom du fichier de téléchargement personnalisé FileField

Explication détaillée du nom du fichier de téléchargement personnalisé FileField

巴扎黑
Libérer: 2017-08-23 13:56:33
original
1797 Les gens l'ont consulté

Cet article vous présente le problème du téléchargement de noms de fichiers dans FileField personnalisé via un exemple de code. Les amis intéressés peuvent s'y référer

L'attribut upload_to dans FileField peut définir le répertoire de stockage et le nom du fichier téléchargé. Il peut s'agir d'une chaîne ou d'un appelable, comme une méthode.

Lorsque la valeur de upload_to est définie sur une méthode, le nom du fichier téléchargé peut être modifié. La méthode nécessite deux paramètres, instance et filename, instance est l'instance de modèle à laquelle appartient FileField et filename est le nom du fichier téléchargé.

Exemple :


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)
Copier après la connexion

Lorsqu'une classe définit la méthode __call__, elle peut également être appelée comme func, donc la valeur de upload_to peut également être une classe qui définit une méthode __call__.

Par exemple, pour ajouter un horodatage au nom du fichier en fonction de l'heure de téléchargement :


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)
Copier après la connexion

Le FileField dans le modèle peut être défini comme suit :


class MyModel(models.Model):
 upload = models.FileField(upload_to=TimeStampFileName(&#39;media/&#39;), )
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal