2016-04-08 62 views
1

これらの用語を誤って使用していると、私はストリーミングの概念が新しくなりました。私はグーグルで多くのリソースを見つけることができませんでした。ストリーミング。私が今持っているDjangoでブラウザに画像をストリーミングする方法

ブラウザは

var img = new Image(); 
img.src = 'http://www.example.com/api/images/51234/ 
img.onload = function() { 
    $('#my-img').attr('src', this.src); 
} 

Djangoが回るDjangoのエンドポイントにイメージのための要求を行うには、画像

import requests 

def get_image(request, img_id): 
    response = requests.get("http://api.myexample.net/album/123/img/{0}".format(img_id)) 

    return HttpResponse(res.content, mimetype="image/jpeg") 
のためのサービスに別の要求を行います

このプロセスの私の理解は、Djangoはブラウザに応答を返す前に、このイメージのバイナリ情報をすべてメモリに読み込んで返すことです。画像がPythonに完全に渡されるのを待つのではなく、ブラウザに直接ストリームを流す方法はありますか?

私はStreamingHTTPResponseクラスのドキュメントを読んでいますが、すべての例ではサーバーのディスクからファイルを読み込んでStreamingHTTPResponseに渡し、別のサービスからファイルを取得しないようにしています。

答えて

1

は、ここでは、これは便利です

import requests 
# have this function in file where you keep your util functions 
def url2yield(url, chunksize=1024): 
    s = requests.Session() 
    # Note: here i enabled the streaming 
    response = s.get(url, stream=True) 

    chunk = True 
    while chunk : 
     chunk = response.raw.read(chunksize) 

     if not chunk: 
     break 

     yield chunk 


# Then creation your view using StreamingHttpResponse 
def get_image(request, img_id): 
    img_url = "http://api.myexample.net/album/123/img/{0}".format(img_id) 
    return StreamingHttpResponse(url2yield(img_url), content_type="image/jpeg") 

願って行うことができます1つの方法です。

1

requests.getを使用して画像コンテンツをダウンロードする必要はありません。あなたはあなたのhtmlファイルにコンテキストを介して簡単にURLを渡すことができます。

def viewFunc(request): 
    image_url = 'some.image.url.jpg' 

のようなHTMLの使用でその後
return render(request, 'some_html.html', {'image_url':image_url}) 

<img src="{{image_url}}" id="image_id"> 

それとも、AJAXを使用している場合:HTMLで次に

return HttpResponse(json.dumps({'image_url':image_url})) 

を:

success : function(response){ 
    var image_url = response.image_url; 
    $('#image_id').attr('src',image_url); 
} 

Djangoは唯一なります。この方法は画像ビューにURLを渡し、画像をフロントエンドからレンダリングする。すべてのブラウザが画像タグから画像を生成できるため、requests.getを使用して画像をダウンロードする必要はありません。

+0

悲しいことに、私は要求を行う必要があると思う。私が含まなかったのは、私が呼んでいるサービスが、画像を返す前に要求でトークンを認証する必要がある認証済みエンドポイントであるということです。 – diplosaurus

+0

生成される画像リンクが静的であるかどうかを確認できます。 –

関連する問題