123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- # coding=utf-8
- import os
- from PIL import Image
- from django.conf import settings
- from django.db import models
- from utils.file_operation import UploadFile, DeleteFile
- from django.utils import timezone
- from apps.tenant.models import Tenant
- class UploadManager(models.Manager):
- # def employee_addnew(self, employee, type, file):
- # return self._addnew(employee.tenant, employee.user, type, file)
- #
- # def customer_addnew(self, customer, type, file):
- # return self._addnew(customer.tenant, customer.user, type, file)
- def _addnew(self, tenant, user, type, file):
- width = None
- height = None
- path = UploadManager.calculatePath(type, tenant.id)
- filename = UploadFile(file, path, user.id)
- fullname = "%s%s" % (settings.MEDIA_ROOT, filename)
- size = os.path.getsize(fullname)
- try:
- img = Image.open(fullname)
- width, height = img.size
- # 缩略图压缩宽或高最大200
- if width > 1440:
- img = img.resize((1440, int((height / width) * 1440)), Image.ANTIALIAS)
- img.save(fullname)
- width, height = img.size
- except:
- pass
- instance = self.model(
- tenant=tenant,
- user=user,
- type=type,
- name=file.name,
- picture="%s%s" % (settings.MEDIA_URL, filename),
- width=width,
- height=height,
- file_size="%.2f" % (float(size)/1024),
- )
- instance.save()
- return instance
- def _addnew_voice(self, tenant, user, type, file, time):
- path = UploadManager.calculatePath(type, tenant.id)
- filename = UploadFile(file, path, user.id)
- fullname = "%s%s" % (settings.MEDIA_ROOT, filename)
- size = os.path.getsize(fullname)
- instance = self.model(
- tenant=tenant,
- user=user,
- type=type,
- name=file.name,
- picture="%s%s" % (settings.MEDIA_URL, filename),
- width=200,
- height=200,
- file_size="%.2f" % (float(size)/1024),
- voice_time=time,
- )
- instance.save()
- return instance
- @staticmethod
- def calculatePath(type, tenant_id):
- path_map = {
- Upload.REPAIR_IMAGE: repair_image,
- Upload.INSPECTION_IMAGE: inspection_image,
- Upload.COMPANY_IMAGE: company_image,
- Upload.REPAIR_VOICE:repair_image,
- }
- return path_map[type] + str(tenant_id) + '/'
- repair_image = "repair/"
- inspection_image = "inspection/"
- company_image = "company/"
- class Upload(models.Model):
- REPAIR_IMAGE = 1
- INSPECTION_IMAGE = 2
- COMPANY_IMAGE = 3
- REPAIR_VOICE = 4
- TYPE_CHOICES = (
- (REPAIR_IMAGE, u'报修图片'),
- (INSPECTION_IMAGE, u'巡检图片'),
- (COMPANY_IMAGE, u'营业执照图片'),
- (REPAIR_VOICE, u'报修语音')
- )
- tenant = models.ForeignKey(Tenant, verbose_name=u'企业', on_delete=models.PROTECT)
- user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'操作人', on_delete=models.PROTECT)
- type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, verbose_name=u"类型")
- name = models.CharField(verbose_name=u'图片名', max_length=250)
- picture = models.CharField(verbose_name=u'图片路径', max_length=250)
- width = models.IntegerField(verbose_name=u"图片宽度", blank=True, default=0)
- height = models.IntegerField(verbose_name=u"图片高度", blank=True, default=0)
- create_time = models.DateTimeField(verbose_name=u'上传时间', auto_now_add=True, editable=False)
- file_size = models.FloatField(verbose_name="文件大小",blank=True, default=0)
- voice_time = models.FloatField(verbose_name="语音时长",blank=True, default=0)
- objects = UploadManager()
- class Meta:
- db_table = 'system_upload'
- verbose_name = u'文件上传'
- ordering = ['-create_time']
- index_together = (
- 'type',
- 'create_time',
- )
- default_permissions = ()
- def del_images(self):
- picture = self.picture
- self.delete()
- DeleteFile(picture)
- def get_path(self):
- return '%s%s' % (settings.SERVER_DOMAIN, self.picture)
|