繼上文的上傳后,終于到了下載模塊,因?yàn)橹皇呛?jiǎn)單實(shí)現(xiàn)低淡,所以就不存在那么多復(fù)雜的流程了,也沒(méi)有自己定義模板什么的莽龟,之前一直糾結(jié)于怎么實(shí)現(xiàn)自動(dòng)彈窗讓你選擇文件存儲(chǔ)路徑,后來(lái)才了解到那是根據(jù)瀏覽器支持情況而定锨天,一直糾結(jié)于后臺(tái)實(shí)現(xiàn)毯盈,因?yàn)橹暗膒ython代碼塊包括阿里云sdk里的支持都是要先定義好路徑和文件名然后直接下載的,話不多說(shuō)病袄,上代碼
表單
屬性設(shè)置基本和前文一樣搂赋,我在html里面的audio標(biāo)簽里面添加了id屬性,其實(shí)必要性也不大益缠,不過(guò)可以增加代碼可讀性嘛脑奠,跟這里的下載操作關(guān)聯(lián)不大我就沒(méi)有嵌代碼了,因?yàn)槲业囊魳?lè)播放器是js實(shí)現(xiàn)的幅慌,所以這里用requests庫(kù)獲取到當(dāng)前audio里面的src屬性值即可宋欺,主要就是獲取到src值供后端操作
<form enctype="multipart/form-data" action="{% url 'download' %}?from={{ request.get_full_path }}" method="post">
{% csrf_token %}
<input type="submit" value="下載">
</form>
views.py
無(wú)關(guān)操作就隱去了,主要就是打開(kāi)要下載的文件,我是從src獲取到文件名從而獲取到文件對(duì)象齿诞,此處設(shè)計(jì)爬蟲(chóng)與oss的相關(guān)細(xì)節(jié)不做贅述酸休,反正就是讀取待下載文件,然后設(shè)定一些響應(yīng)屬性祷杈,filename那里可以指定默認(rèn)文件名雨席,返回響應(yīng)即可,百度應(yīng)該會(huì)給出基本的三大類(lèi)型的django文件下載方式吠式,這種是最推薦的,支持大小文件而且避免了緩存等問(wèn)題的異常抽米,大家可以去嘗試一下
def download_file(request):
referer = request.META.get('HTTP_REFERER', reverse('home'))
#url = "http://127.0.0.1:8000/"
#html = getHTMLText(url)
#src = get_data(html)
#file_name = unquote(src, 'utf-8').split('com/')[1]
#os.chdir(‘../static/cloud’)
#bucket.get_object_to_file(file_name, file_name)
file = open(file_name, 'rb')
response = FileResponse(file)
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = 'attachment;filename="example.tar.gz"'
return response
#return redirect(request.GET.get('from', reverse('home')))