如何解决下载文件,然后用户决定在哪里找到文件
我遇到了这个问题,我正在寻找如何下载AWS Bucket文件,但没有在客户端上下载它并决定将其保存在哪里,这是行不通的。
$S3Options =
[
'version' => 'latest','region' => 'us-east-1','credentials' =>[
'key' => 'xxxxxxx','secret' => 'xxxxxxxx'
],'scheme' => 'http'
];
$s3 = new Aws\S3\S3Client($S3Options);
$getFile = $s3->getObject(
[
'Key' => 'xxxx/'.$archivo[1],'Bucket' => 'xxxxxxx',]);
$getFile = $getFile->toArray();
file_put_contents($archivo[1],$getFile['Body']);
解决方法
首先,file_put_contents会将文件保存到服务器而不是客户端。您需要直接将内容显示给客户端。最简单的方法是echo:
echo $getFile['Body'];
要强制用户下载文件(而不是在浏览器上显示文件),您需要提供浏览器不知道如何直接处理的标头。
$S3Options = [
'version' => 'latest','region' => 'us-east-1','credentials' =>[
'key' => 'xxxxxxx','secret' => 'xxxxxxxx'
],'scheme' => 'http',];
$s3 = new Aws\S3\S3Client($S3Options);
$getFile = $s3->getObject([
'Key' => 'xxxx/'.$archivo[1],'Bucket' => 'xxxxxxx',]);
$getFile = $getFile->toArray();
// ** Add header call here **
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream'); // this is the most important line
header('Content-Transfer-Encoding: binary');
// ** header end **
echo $getFile['Body'];
现在,浏览器将知道下载文件而不是显示文件,但不能保证浏览器会提示用户输入保存位置。
浏览器之间的下载行为不同。而且大多数浏览器还为用户提供了“无需询问即可保存到默认位置”的选项。如果用户将浏览器设置为不询问而保存,则永远不会出现对话框。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。