该方法创建一个zip文件并下载它。该文件在storage/app/public
文件夹中创建(我运行php artisan storage:link
创建了一个符号链接),但它不下载。
public function download()
{
$zip_file = 'screenshots.zip';
$zip_path = storage_path('app/public/'.$zip_file);
$zip = new \ZipArchive();
$zip->open($zip_path, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
$path = storage_path('app/public/screenshots');
$files = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path));
foreach ($files as $name => $file) {
if ($file->isDir()) {
continue;
}
$filePath = $file->getRealPath();
$relativePath = 'screenshots/' . substr($filePath, strlen($path) + 1);
$zip->addFile($filePath, $relativePath);
}
$zip->close();
return response()->download($zip_path);
}
JS系统
function downloadImages() {
const token = document.querySelector('meta[name="csrf-token"]').content;
fetch('/download', {
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json, text-plain, */*',
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN': token
},
method: 'get',
})
.then((response) => {
console.log('download');
})
.catch((error) => {
console.log(error);
})
}
3条答案
按热度按时间sqserrrh1#
下载无法正常工作的原因可能有多种。
1.一个可能的原因是文件路径不正确。请检查以确保zip文件的路径正确,并且该文件位于正确的目录中。
1.另一种可能是download函数配置不正确,确保函数返回一个响应对象,而不是字符串,并且传递给download函数的路径是正确的,在本例中应该是response()-〉download($zip path)。
1.如果您使用的是Web服务器,请确保将其设置为允许下载,并且文件的权限设置正确。
1.如果文件没有正确关闭,则存在另一种可能性,要排除这种可能性,请尝试调用**$zip-〉close();**在响应之前。
你可以尝试使用var dump来查看这个函数是否返回了任何东西,看看它是否能帮助你找到问题所在,你也可以查看你的web服务器的错误日志。
lp0sw83n2#
对于客户端浏览器的跨平台下载,您可以使用php echo string:
日本
r是一个div,用于接收responseText形式的响应:
brjng4g33#
修复!
APP_URL
设置不正确。我还将JS方法更改为:
谢谢@pathum-bandara