1

Django Filer でアップロードしたばかりのファイルの絶対 URL を取得することは可能ですか?

私の問題はこれです:

Django Filer を使用して音楽をアップロードしています。次に、このファイルを 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
4

1 に答える 1

0

Django Filer は、uploaded_atアップロード時に (日時フィールド) モデル属性を設定します。これをフィルタリングして、Mixcloud に転送する新しいアップロードを取得できます。

絶対URLの取得について。ファイラーのドキュメントは、この点で少し注意が必要です。ただし、使用できる属性が 2 つあります。

  • 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
于 2014-10-27T10:52:48.773 に答える