通过任何途径使用任何有效的二进制文件(pdf,图像等),我的下载始终为0字节。当我存储文件或以其他方式访问它时,文件是有效的。
如果我在任何有效的文本文件(csv, json, txt)上运行response->download($somePath),响应是有效和正确的!
我尝试了streamDownload(), file(),我甚至尝试在没有Symfony的情况下手动发送响应。我试过使用ob_clean(), flush()等。我试过几个不同的头,我试过改变缓存控制…没有作品。
这是在php-fpm上,使用nginx, php 7.4。
$path = Storage::disk('test')->url('whatever.pdf');
dump(strlen(File::get($path)); // 5115
if (File::exists($path)) {
$r = response()
->download(
$path,
'whatever.pdf',
[
'content-length' => strlen(File::get($path)),
'Content-Type' => 'application/pdf'
]
);
// $r->headers->set('cache-control', 'private');
return $r; // 0 bytes returned!
}
``
您试过以下方法吗:
$path = Storage::disk('test')->url('whatever.pdf');
dump(strlen(File::get($path)); // 5115
if (File::exists($path)) {
return response()->download(Storage::disk('test')->path('whatever.pdf'));
}
response()->download()
方法需要文件的绝对路径,我认为->url()
没有提供。
请求正在通过node微服务器路由,响应被作为文本处理。
将响应处理为二进制解决了这个问题。在此之前,此服务器仅设置为发送文本。
res.buffer()