我正在尝试使用 Yii2 提供的内置函数 sendFile() 来允许用户下载文件。但是,这不会实际下载文件。下面是我的ajax代码 $.ajax({ url: 'https://'+window.location.hostname+'/download', dataType: "json", type: 'POST', data: {name: name}, })服务端代码 $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";上面提供的代码是我目前用来下载文件的代码。当用户单击下载图标时,会对包含上述逻辑的操作进行 Ajax 调用,从而将该文件发送到用户的浏览器。进行 Ajax 调用时,服务器返回200但实际上并未下载文件。相反,响应中是所请求文件的内容。例如,如果用户请求包含文本的文件'Hello there!',当 Ajax 调用完成时,将不会下载任何内容,但服务器响应(如通过 FireFox 开发工具看到的)显示'Hello there!'。有什么原因不能下载文件本身吗?如果我只是导航到localhost/downloadFile另一个选项卡中的 url(可以说它的),则会调用该操作,打开下载对话框,然后我可以下载文件。
1 回答
DIEA
TA贡献1820条经验 获得超2个赞
你必须做
return
的第一件事是声明,如果你从控制器动作返回它,则send()
在之后没有任何调用的用途sendFile()
,只需保持如下所示return Yii::$app->response->sendFile($path, $filename);
Ajax 不适用于文件下载,您应该创建一个弹出窗口或简单地使用
window.location.assign('https://'+window.location.hostname+'/download/'+name);
您将看到该页面不会更改您当前所在的页面,并且将触发文件下载对话框。
- 1 回答
- 0 关注
- 520 浏览
添加回答
举报
0/150
提交
取消