2017-03-21 8 views
0

アップロードされたファイルをクライアントに返そうとしています。私はちょうど "ファイル" ルートにしようとしていたDjango Rest Framework:アップロード後にファイルをクライアントに返す

models.py

file = models.FileField(_('file'), db_index=True, null=True, blank=True, upload_to='files/') 

ビューここ

class ContentInfoViewSet(viewsets.ModelViewSet): 
    queryset = ContentInfo.objects.all() 
    serializer_class = ContentInfoSerializer 
    http_method_names = ['get'] 

    @detail_route(methods=['get']) //this is just for testing 
    def files(self, request, pk=None): 
     return Response(pk, status=status.HTTP_200_OK) 

私が試してみると、 "content-info"と表示されます。それはうまく動作します:

[ 
    { 
    "url": "http://127.0.0.1:8000/users/content-info/1/", 
    "id": 1, 
    "date": "2017-01-27T16:21:41.976289Z", 
    "title": "Hey Hey", 
    "image_url": "", 
    "content_url": "", 
    "file": null 
    }, 
    { 
    "url": "http://127.0.0.1:8000/users/content-info/3/", 
    "id": 3, 
    "date": "2017-03-21T12:09:32.984119Z", 
    "title": "NWE", 
    "image_url": "", 
    "content_url": "", 
    "file": "http://127.0.0.1:8000/users/content-info/files/BIAM-51.pdf" 
    } 
] 

しかし、このURLは機能しません。たとえ私がを取得したとしても、承認のあるが得られます。私は何が間違っているのか分からない。 ページが見つかりません。 pdf

あなたがリンクを開いたとき、それはPDFを示しています。それはurls.py(私はhttp://127.0.0.1:8000/users/content-info/files/BIAM-51.pdfを意味する)

このソリューションは、素晴らしいことだではないので、それは、ロジックです。私はこのリンク "http://127.0.0.1:8000/users/content-info/files/BIAM-51.pdf"

+0

あなたはDjangoの残りのフレームワークの権利を使用していますか? 多分この記事(http://stackoverflow.com/questions/2294507/how-to-return-static-files-passing-through-a-view-in-django)は役に立ちます – code22

+0

ええ、申し訳ありませんが、私はそれを目標にするのを忘れた。 –

+0

それを行うより良い方法はありますか? (私がfileFieldを使用しない場合でも)私はブラウザにファイルを表示したいだけです。要点は、HTML、pdf、MP3のいずれかを表示することができないということです。コンテンツタイプでは、タイプを指定する必要があります –

答えて

0

ASコード22に従うと、私はmedia_rootでこれを行うことができたと思っていましたが、今はとてもうまく動作します。

プロジェクトで「media」フォルダを作成しました。

proj 
|---proj 
|---media 
|---static 
|---app 

、その後、私はモデルに(プロジェクト全体の)urls.py

from proj import settings 
from django.views.static import serve 

urlpattern = [ 
    ... 
    url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}), 
] 

settings.py

MEDIA_URL = '/media/' 
MEDIA_ROOT = os.path.join(BASE_DIR, "media/") 

これにこれを追加しました。 py

その後、
file = models.FileField(_('file'), db_index=True, null=True, blank=True, upload_to='files/') 

python3 manage.py makemigrationspython3 manage.py migrate

と(アップロード後の)ファイルはここにある:http://api.mydomain.com/media/files/myfile.pdf"、それはそれだ:)

関連する問題