import os from django.db import models from django.conf import settings from django.core.files.storage import default_storage class Upload(models.Model): user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING, null=True) is_private = models.BooleanField(default=False) original_filename = models.CharField(max_length=128) filesize = models.IntegerField() width = models.IntegerField(null=True, blank=True) height = models.IntegerField(null=True, blank=True) path = models.CharField(max_length=255) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) sha1 = models.CharField(max_length=64) origin = models.CharField( max_length=255, help_text='user can upload resource by url' ) extension = models.CharField( max_length=80, default='application/octet-stream', blank=True, null=True) class Meta: db_table = 'pingcap_uploads' def __str__(self): return self.original_filename @property def url(self): return default_storage.url(self.path) @property def private_url(self): return os.path.join(settings.MEDIA_PRIVATE_URL, self.path) @property def oss_sign_url(self): return default_storage.sign_url(self.path)