簡體   English   中英

如何創建動態上傳路徑Django

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM