[英]How to create a Dynamic upload path Django
我有一個 Django rest api,它使用 Opencv 將用戶上傳的視頻轉換為幀。
我還有一個函數upload_to
可以為上傳的視頻創建一個動態路徑。
我想將視頻中的幀寫入upload_to 文件夾。
我試過cv2.imwrite(os.path.join(upload_to,'new_image'+str(i)+'.jpg'),frame)
但它產生了一個錯誤。
def upload_to(instance, filename):
now = timezone.now()
base, extension = os.path.splitext(filename.lower())
return f"SmatCrow/{instance.name}/{now:%Y-%m-%d}{extension}"
OpenCV 腳本
def video_to_frame(video):
now = timezone.now()
cap= cv2.VideoCapture(video)
i=1
while(cap.isOpened()):
ret, frame = cap.read()
if ret == False:
break
if i%10 == 0:
cv2.imwrite(('media/SmatCrow/new_image'+str(i)+'.jpg'),frame)
i+=1
cap.release()
cv2.destroyAllWindows()
我的模型.py
class MyVideo(models.Model):
name= models.CharField(max_length=500)
date = models.DateTimeField(auto_now_add=True)
videofile= models.FileField(upload_to=upload_to)
def __str__(self):
return self.name + ": " + str(self.videofile)
def save(self, *args, **kwargs):
super(MyVideo, self).save(*args, **kwargs)
tfile = tempfile.NamedTemporaryFile(delete=False)
tfile.write(self.videofile.read())
vid = video_to_frame((tfile.name))
我遇到過這種情況,我通過創建單獨的目錄來保存不同的公司 bardode 我在模型中定義了MEDIA_ROOT並覆蓋了保存方法,並通過針對不同公司檢查的 api 調用獲取公司名稱並創建單獨的文件夾
def save(self, *args, **kwargs):
for field in self._meta.fields:
if field.name == 'barcode':
field.upload_to = f'{self.company.name}/{str(date.today())}'
return super().save(*args, **kwargs), self.company.name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.