2014-10-27 66 views
0

是否可以獲取剛用Django Filer上傳的文件的絕對URL?Django-filer獲取絕對URL和Django芹菜上傳

我的問題是這樣的:

我使用Django的文件管理器上傳音樂。然後我想將這個文件提交給Django Celery,使用他們的API上傳到Mixcloud。但是..

我無法弄清楚如何獲取文件的URL。我沒有使用視圖,我只想使用管理員,抓取剛上傳的文件併發送到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 

回答

0

Django的文件管理器上設置的上傳uploaded_at(時間字段)模型屬性。您可以對此進行過濾以獲取新的上傳內容以轉發到Mixcloud。

至於獲取絕對網址。 Filer文檔在這方面有點棘手。但有兩個屬性可供您使用:

  • 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
+0

這是正確的方法嗎? mp3 = MixcloudUpload.files.objects.all()[0] .path當我嘗試這個時,我得到的對象沒有屬性'對象' – bbcrtv 2014-10-27 11:17:38

+0

例子'File.objects.all()[0]'只是你可以嘗試出來。我知道你的模型名爲MixcloudUpload,可能包含一個FilerFileField?您可能想要通過'MixcloudUpload.objects.filter(filefield__uploaded_at__gt = last_celery)'進行過濾,其中'last_celery'是日期時間對象,'filefield'是FilerFileField的名稱。對於這些對象中的每一個,您都可以獲得路徑。 – rrmoelker 2014-10-27 11:24:16

+0

謝謝,我剛剛更新了文章,以便您可以更清楚地看到即時消息試圖實現的目標 – bbcrtv 2014-10-27 11:28:26