为了账号安全,请及时绑定邮箱和手机立即绑定

Yi2 使用 SendFile() 下载文件

Yi2 使用 SendFile() 下载文件

PHP
大话西游666 2021-12-03 16:28:33
我正在尝试使用 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个赞

  1. 你必须做return的第一件事是声明,如果你从控制器动作返回它,则send()在之后没有任何调用的用途sendFile(),只需保持如下所示

     return Yii::$app->response->sendFile($path, $filename);
  2. Ajax 不适用于文件下载,您应该创建一个弹出窗口或简单地使用

     window.location.assign('https://'+window.location.hostname+'/download/'+name);

您将看到该页面不会更改您当前所在的页面,并且将触发文件下载对话框。


查看完整回答
反对 回复 2021-12-03
  • 1 回答
  • 0 关注
  • 520 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信