我正在尝试将图像从其他网站下载到laravel中的用户硬盘上,并且它在笔记本电脑浏览器(chrome,firefox)上完美运行,但是当我尝试在智能手机浏览器(chrome)上下载图像时,显示404错误..我真的很努力地解决了这个问题,但是什么也没发生...这是我的控制器
public function file($url){
$url = base64_decode($url);
$filename = 'profile_pic_instaleet.jpg';
$tempImage = tempnam(sys_get_temp_dir(), $filename);
copy($url, $tempImage);
$headers = [
'Content-Type' => 'image/jpeg',
'Cache-Control: no-store, no-cache',
'Content-Disposition: attachment; filename='.$filename,
];
return response()->download($tempImage, $filename, $headers);
}
Route::get('/download/{url}', 'Downloader@file');
HTML代码
<a href="/download/{{ base64_encode($info['hddp']) }}" class="button is-success is-rounded is-fullwidth"><img src="{{ asset('svg/downloads.svg') }}" width="20px"/>  Download This Profile In HD</a>
https://instagram.fixc2-1.fna.fbcdn.net/vp/cd2a2fcbdcbd5b2066c88353d7b8811d/5E539700/t51.2885-19/s320x320/73238666_416113319087062_6640995458049114112_n.jpg?_nc_ht=instagram.fixc2-1.fna.fbcdn.net
答案 0 :(得分:0)
base64_encode使用一些不适合URL的字符。您提到的情况包含一个斜杠:
aHR0cHM6Ly9zY29udGVudC1sYXgzLTEuY2RuaW5zdGFncmFtLmNvbS92cC8wNmI0NjcwZGIzZTVjOTU5ODRhZTNlNTA5MmQ2MWQ5Ni81RTRFOTJGNS90NTEuMjg4NS0xOS9zMzIweDMyMC83MjQ4MzMyN18yNTQwNzY3NTQyODc0ODY0XzU3MTE4NzE2NjQwMTEwODM3NzZfbi5qcGc **/** X25jX2h0PXNjb250ZW50LWxheDMtMS5jZG5pbnN0YWdyYW0uY29t
这将使您的网址为http://nalinnishant.com/download/{something}/{something else}
,并且不会遵循Laravel的路由download/{hash}
。使用网址安全的编码方法代替base64。