我正在嘗試使用 Yii2 提供的內(nèi)置函數(shù) sendFile() 來允許用戶下載文件。但是,這不會(huì)實(shí)際下載文件。下面是我的ajax代碼 $.ajax({ url: 'https://'+window.location.hostname+'/download', dataType: "json", type: 'POST', data: {name: name}, })服務(wù)端代碼 $filename = "test.txt"; $path = Yii::getAlias('@webroot')."/uploads/test.txt"; Yii::$app->response->sendFile($path, $filename)->send(); //I've also tried variations of the file path and name. E.G: $filename = "test.txt"; $path = Yii::getAlias('@webroot')."/uploads";上面提供的代碼是我目前用來下載文件的代碼。當(dāng)用戶單擊下載圖標(biāo)時(shí),會(huì)對(duì)包含上述邏輯的操作進(jìn)行 Ajax 調(diào)用,從而將該文件發(fā)送到用戶的瀏覽器。進(jìn)行 Ajax 調(diào)用時(shí),服務(wù)器返回200但實(shí)際上并未下載文件。相反,響應(yīng)中是所請(qǐng)求文件的內(nèi)容。例如,如果用戶請(qǐng)求包含文本的文件'Hello there!',當(dāng) Ajax 調(diào)用完成時(shí),將不會(huì)下載任何內(nèi)容,但服務(wù)器響應(yīng)(如通過 FireFox 開發(fā)工具看到的)顯示'Hello there!'。有什么原因不能下載文件本身嗎?如果我只是導(dǎo)航到localhost/downloadFile另一個(gè)選項(xiàng)卡中的 url(可以說它的),則會(huì)調(diào)用該操作,打開下載對(duì)話框,然后我可以下載文件。
1 回答

DIEA
TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊
你必須做
return
的第一件事是聲明,如果你從控制器動(dòng)作返回它,則send()
在之后沒有任何調(diào)用的用途sendFile()
,只需保持如下所示return Yii::$app->response->sendFile($path, $filename);
Ajax 不適用于文件下載,您應(yīng)該創(chuàng)建一個(gè)彈出窗口或簡(jiǎn)單地使用
window.location.assign('https://'+window.location.hostname+'/download/'+name);
您將看到該頁面不會(huì)更改您當(dāng)前所在的頁面,并且將觸發(fā)文件下載對(duì)話框。
- 1 回答
- 0 關(guān)注
- 589 瀏覽
添加回答
舉報(bào)
0/150
提交
取消