[英]python requests return file-like object for streaming
我創建了一個這樣的請求對象:
obj.mp3 = requests.get('http://foo.com/bar.mp3', stream=True)
我以為我可以將這個obj.mp3
對象提供給任何需要文件或 URI 的音頻播放器,顯然這個想法是錯誤的:沒有播放。 下面是完整的代碼:
#views.py
class ArticleDetailView(DetailView):
model = Article
template_name = 'song.html'
def get_object(self):
obj = super(ArticleDetailView, self).get_object()
#code to store mp3 url in obj.mp3 and other stuff
if obj.mp3:
obj.mp3 = requests.get(obj.mp3, stream=True).content
return obj
#song.html
<div class="audio">
<audio src={{ article.mp3 }} type="audio/mpeg">
</div>
將requests
返回視為我可以與播放器一起播放的內容的正確方法是什么? 我知道至少我可以將obj.mp3
寫入文件,然后將播放器指向文件位置,但我試圖避免將文件寫入磁盤。
謝謝,
有一個屬性Response.raw ,它已經是一個類似文件的對象。
resp = requests.get(url, stream=True)
resp.raw # is what you need
使用io.BytesIO(resp.content)
不是可取的,因為在幕后您兩次讀取相同數量的數據(也是內存方面):訪問resp.content
從網絡流中讀取所有內容,然后io.BytesIO(resp.content)
再次分配相同數量的內存,然后您從 BytesIO 對象中讀取它。
查看io 模塊以使用類文件對象。
可能您可以使用io.BytesIO
,您可以使用Response.content
進行初始化。 然后你得到一個類似文件的對象而不是字節列表。
import io
resp = requests.get(url, stream=True)
obj.mp3 = io.BytesIO(resp.content)
Django 的職責是生成 HTML 代碼,然后由瀏覽器解釋。 瀏覽器需要流式傳輸音頻。 您需要通過 Django 模板傳遞 mp3 url,然后像http://www.jwplayer.com/這樣的播放器可以在客戶端進行流式傳輸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.