django如何給上傳的圖片重命名(給上傳文件重命名)

settings.py中設置:

# 設置文件上傳路徑,圖片上傳、文件上傳都會存放在此目錄裏
MEDIA_URL = '/static/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'static/media').replace('\\','/')

在項目app中新建文件storage.py:

# 給上傳的圖片重命名
from django.core.files.storage import FileSystemStorage
from django.http import HttpResponse

class ImageStorage(FileSystemStorage):
    from django.conf import settings

    def __init__(self, location=settings.MEDIA_ROOT, base_url=settings.MEDIA_URL):
        # 初始化
        super(ImageStorage, self).__init__(location, base_url)

    # 重寫 _save方法
    def _save(self, name, content):
        # name爲上傳文件名稱
        import os, time, random
        # 文件擴展名
        ext = os.path.splitext(name)[1]
        # 文件目錄
        d = os.path.dirname(name)
        # 定義文件名,年月日時分秒隨機數
        fn = time.strftime('%Y%m%d%H%M%S')
        fn = fn + '_%d' % random.randint(0, 100)
        # 重寫合成文件名
        name = os.path.join(d, fn + ext)
        # 調用父類方法
        return super(ImageStorage, self)._save(name, content)

models.py文件中添加如下代碼:

from .storage import ImageStorage

# 商品信息
class GoodsInfo(models.Model):
    # gpic = models.ImageField(upload_to='article_img/',verbose_name='商品圖片',null=True,blank=True)
    gpic = models.ImageField(upload_to='article_img/%Y%m',storage=ImageStorage(),verbose_name='商品圖片',null=True,blank=True)

效果如下:

static/media/article_img/201905/20190526173903_19.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章