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

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