首頁  >  文章  >  web前端  >  FileField自訂上傳檔案名稱詳解

FileField自訂上傳檔案名稱詳解

巴扎黑
巴扎黑原創
2017-08-23 13:56:331741瀏覽

本文透過實例程式碼介紹了客製化FileField中的上傳檔案名稱問題,有興趣的朋友參考吧

FileField中的upload_to屬性可以設定上傳檔案的儲存目錄和名稱,它可以是個字串,也可以是個callable,例如一個方法。

  當upload_to的值設為一個方法時,就可以對上傳檔案的名稱進行修改了。方法需要兩個參數,instance與filename,instance為此FileField所屬的Model實例,filename為上傳檔案的名稱。

  範例:


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)

 當一個類別定義了__call__方法時,也可以像func一樣被調用,所以,upload_to的值也可以是一個定義了__call__方法的類別。

   例如,要依照上傳時間為檔案名稱加上時間戳記:


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)

 Model中的FileField可以如下定義:


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

以上是FileField自訂上傳檔案名稱詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn