Django-filer获取绝对URL和Django Celery上传

时间:2014-10-27 10:32:40

标签: python django django-celery django-filer

是否可以获取刚刚使用Django Filer上传的文件的绝对URL?

我的问题是:

我正在使用Django Filer上传音乐。然后,我想将此文件提交给Django Celery,使用他们的API上传到Mixcloud。但是..

我无法弄清楚如何获取文件的网址。我没有使用视图,我想只使用管理员,抓取刚上传的文件并发送到Celery,使用他们的API上传到Mixcloud。但我只能将模型中的对象导入芹菜。

我的模特:

class MixcloudUpload(models.Model):
    files = FilerFileField(null=True, blank=True)
    data = {'name': 'API Test'}


    def save(self, *args, **kwargs):

        super(MixcloudUpload, self).save(*args, **kwargs)
        from .tasks import uploadtask
        uploadtask.delay(self.id)

我的任务:

@celery_app.task()
def uploadtask(request):
    sleep(5)
    # Update the state. The meta data is available in task.info dicttionary
    # The meta data is useful to store relevant information to the task
    # Here we are storing the upload progress in the meta.
    post_url = 'https://api.mixcloud.com/upload/?access_token=ugY'
    from .models import MixcloudUpload
    mp3 = MixcloudUpload.files
    data = MixcloudUpload.data
    files = ({'mp3': open(mp3)})
    headers = {'enctype': 'multipart/form-data'}
    r = requests.post(post_url, headers=headers, files=files, data=data, verify=True)
    return r, r.json(), request

1 个答案:

答案 0 :(得分:0)

Django Filer在上传时设置uploaded_at(日期时间字段)模型属性。您可以对此进行过滤以获取新的上传内容以转发到Mixcloud。

获取绝对网址。在这方面,文件管理器文档有点棘手。但是您可以使用两个属性:

  • File.objects.all()[0].path,是文件系统上文件的路径。
  • File.objects.all()[0].url,域名后的网址路径,例如:/media/filer_public/23/23/34565b67-e1de-41da-3132-1403c335fdd4/test_img.png/。您需要自己添加域名。所以完整的路径就像:"http" + urlencode(site_obj.domain) + filer_obj.url