在笔记本电脑上而不是在智能手机上下载图片

时间:2019-11-21 14:33:37

标签: php laravel

我正在尝试将图像从其他网站下载到laravel中的用户硬盘上,并且它在笔记本电脑浏览器(chrome,firefox)上完美运行,但是当我尝试在智能手机浏览器(chrome)上下载图像时,显示404错误..我真的很努力地解决了这个问题,但是什么也没发生...这是我的控制器


Downloader.php (控制器)

 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);
    }


web.php (路由)

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"/>&nbsp 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

1 个答案:

答案 0 :(得分:0)

base64_encode使用一些不适合URL的字符。您提到的情况包含一个斜杠:

aHR0cHM6Ly9zY29udGVudC1sYXgzLTEuY2RuaW5zdGFncmFtLmNvbS92cC8wNmI0NjcwZGIzZTVjOTU5ODRhZTNlNTA5MmQ2MWQ5Ni81RTRFOTJGNS90NTEuMjg4NS0xOS9zMzIweDMyMC83MjQ4MzMyN18yNTQwNzY3NTQyODc0ODY0XzU3MTE4NzE2NjQwMTEwODM3NzZfbi5qcGc **/** X25jX2h0PXNjb250ZW50LWxheDMtMS5jZG5pbnN0YWdyYW0uY29t

这将使您的网址为http://nalinnishant.com/download/{something}/{something else},并且不会遵循Laravel的路由download/{hash}。使用网址安全的编码方法代替base64。