2012-01-17 56 views
1

我想創建一個應用程序,將視頻文件發送到編碼服務和從編碼服務到AWS存儲桶。這需要我將文件提供給處理上傳的函數,並在保存管理員對象之前更新fil位置的url。Django自定義管理方法上傳文件

上傳到編碼器進程返回JSON格式的信息,顯示錯誤或成功。我在網站的客戶端嘗試使用它沒有任何問題。但是我不太清楚如何使用Django的管理員來解決這個問題。我看過文檔並找到了ModelAdmin.add_view()。我不確定如何獲取上傳文件的名稱和路徑,因爲這是功能上傳到編碼器所必需的。

我意識到,由於編碼器發回ping,所以一旦完成該過程,最好保存所有其他信息。

如何訪問上傳的文件,以便我可以對其執行編碼功能,並在服務從服務接收到ping回來時保存所有其他信息?

編輯:

按照要求事件的時間軸/流。

這是如何工作的,現在在前端:

  • 文件上傳編碼器服務發送JSON
  • file_upload_handle檢查文件大小和持續時間
  • 文件上傳到編碼器(上傳過程中與狀態信息)
  • 編碼器發送文件,AWS和一個可以通告服務器上成功

我試圖確保上傳到編碼器是在models.py之外完成的,因爲它在JSON響應中返回了一些導入信息,可用於反回錯誤。

+0

你能發佈應該發生的事件的時間表嗎? – jpic 2012-01-17 18:52:58

回答

2

它會大概更好create a custom storage

如果你只想覆蓋管理員的保存功能,那麼你就應該重寫save_model()

def save_model(self, request, obj, form, change): 
    """ 
    Given a model instance save it to the database. 
    """ 

    # your custom stuff here, this is the file path, change "upload_field_name" 
    # by your actual FileField name 
    obj.upload_field_name.path 

    obj.save() 

此代碼是從django/contrib/admin/options.py,其中介紹很多方法可以覆蓋拍攝。

或者,你可以功能連接到pre_save信號這樣:

from django.db.models import signals 

def encode_upload(sender, instance=None, created=None, **kwargs): 
    # your custom stuff here, this is the file path, change "upload_field_name" 
    # by your actual FileField name 
    instance.upload_field_name.path 

# change YourModelClass by the name of your actual model class 
signals.pre_save.connect(encode_upload, sender=YourModelClass) 

這將使encode_upload被稱爲之前保存YourModelClass的一個實例。在管理員中,在其他視圖中,任何地方save()被稱爲

注意,slot(功能/ 回調連接到信號)應時,該網站開始連接。例如,在models.py中使用它。

學習more about signals

+0

我用save_model(),它工作得很好。非常感謝你的指導。 – 2012-01-17 21:09:56

+0

有問題。我將如何去保存新文件的URL而不是已經加載的文件,以及如何刪除最初上傳的文件,並且如果編碼器函數是在芹菜函數中封裝的話,它會好嗎? – 2012-01-17 21:17:31

+0

正如你所看到的一個簡單的SQL SELECT,FileField的存儲值是該文件相對於STATIC_ROOT的路徑。因此,如果您有STATIC_ROOT ='/ foo'和upload_to ='bar',並且您的新文件位於/foo/bar/new/file.ext中,則將文件字段的值設置爲bar/new/file.ext。如果它位於/foo/bar/new_file.ext中,則將文件字段的值設置爲bar/new_file.ext。請注意,絕對路徑也應該起作用,但這是一種非常糟糕的做法。至於刪除文件,一個簡單的os.unlink調用文件路徑作爲參數(model.filefield.path)應該工作。 – jpic 2012-01-18 13:48:56