-1

在appengine中,我使用此模型爲要上傳的視頻部署了Python代碼。視頻模型和ndb

我啓用了視頻上傳當視頻上傳時,它出現在數據存儲中的模型「視頻」的實例。我認爲這個類應該和ndb庫一起使用,而不是傳統的db-Model,但是我還沒有學習ndb,我的模型相當複雜和引用。

class Video(db.Model): 

    reference = db.ReferenceProperty(Item, 
            collection_name='matched_videos', verbose_name='Title') 
    content = blobstore.BlobReferenceProperty() 
    title = db.StringProperty() 
    filename = db.StringProperty() 
    size = db.IntegerProperty() 
    added = db.DateTimeProperty(verbose_name='added', auto_now_add=True) # readonly 

    def get_video(self,video_id): 
    return Video.get_by_id(video_id) 

然後,當用戶上傳視頻,我只是檢查,如果第一次上傳的視頻,否則它是普通的圖像。我發現appengine可以存儲ogv和mp4,但不是所有的視頻格式。存儲上傳的視頻在我的代碼中看起來如下所示。

for upload in self.get_uploads(): 
     try: 
      #logging.info(blobstore.blobstore.BlobInfo(upload.key()).content_type) 

      content_type = blobstore.blobstore.BlobInfo(upload.key()).content_type 

      if 'video' in content_type and not ad.hasvideo: 
       vid = Video(reference=item) 
       vid.content = upload.key() 
       vid.title = blobstore.blobstore.BlobInfo(upload.key()).filename 
       vid.size = blobstore.blobstore.BlobInfo(upload.key()).size 

       tmp = upload.key() 
       vid.put() 
       item.hasvideo = True 
       item.videos.append(upload.key()) 
      else: 
       img = Image(reference=ad) 
       img.primary_image = upload.key() 

       img.put() 
       item.hasimages = True 
       item.image_url = images.get_serving_url(str(upload.key()), size=640) 

       item.blobs.append(upload.key()) 

       item.put() 
      counter = counter + 1 
     except Exception, e: 
      logging.error('There was an exception:%s' % str(e.message)) 
      pass 

然後查看視頻我使用此代碼。

​​

該模型item是由用戶發佈的項目的類。現在我的問題,如果我應該重寫它,而不是使用ndb數據存儲?我在ndb存在之前就開始了這個項目,我意識到使用ndb似乎更好,但是如果我的類也不是ndb,我可以在mndb模型和non-ndb模型之間進行引用,還是必須同時遷移所有模型?

回答

1

1)停止使用blobstore,並將您的視頻放入GCS(Google雲端存儲)存儲桶中。

2)將密鑰存儲在ndb模型中的GCD視頻中。其他屬性很容易切換到ndb。