2012-01-17 21 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