天天看點

django圖檔上傳修改圖檔名稱

# 給上傳的圖檔重命名
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)      
import django.utils.timezone as timezone

from django.db import models
from django.contrib import admin


from .storage import ImageStorage

# Create your models here.
class Urls(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(verbose_name="标題",max_length=255)
    created_at = models.DateTimeField(verbose_name="建立時間",default = timezone.now)
    url = models.ImageField(upload_to='images/%Y%m',storage=ImageStorage(),blank=True, verbose_name='圖檔', null=True)

    readonly_fields = ['image_data']

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = '圖檔管理'
        verbose_name_plural = '圖檔管理'