Django-filer получает абсолютный URL и Django Celery Upload
Можно ли получить абсолютный URL-адрес файла, только что загруженного с помощью Django Filer?
Моя проблема заключается в следующем:
Я использую Django Filer для загрузки музыки. Затем я хочу отправить этот файл в Django Celery для загрузки в Mixcloud, используя их API. Но..
Я не могу понять, как получить URL-адрес файла. Я не использую представления, я хочу просто использовать администратора, получить только что загруженный файл и отправить в Celery для загрузки в Mixcloud с помощью их API. Но я могу только импортировать объект из модели в сельдерей.
Моя модель:
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 ответ
Джанго Филер устанавливает uploaded_at
(поле даты и времени) атрибут модели при загрузке. Вы можете отфильтровать это, чтобы получать новые загрузки для пересылки в Mixcloud.
Что касается получения абсолютного URL. В этом отношении документация на файлера немного сложна. Но есть два атрибута, которые вы можете использовать:
File.objects.all()[0].path
, это путь к файлу в файловой системе.File.objects.all()[0].url
URL-путь после домена, например:/media/filer_public/23/23/34565b67-e1de-41da-3132-1403c335fdd4/test_img.png/
, Вы должны добавить свой домен самостоятельно. Таким образом, полный путь будет примерно таким:"http" + urlencode(site_obj.domain) + filer_obj.url
,