[Laravel] 从url下载档案/储存档案

Laravel

前言

目的是将前端看到的 url图片储存在本机 sever。

读取图片

目前有两种做法可以取得图片:file_get_contents 和 fopen,皆是 php 的内建函式。

file — Reads entire file into an arrayfile_get_contents — Reads entire file into a stringfopen — Opens file or URL

fopen

$file = fopen ($url, 'rb');

file_get_contents

$contents = file_get_contents($url);

储存图片

存 url 的图

也有两种做法:

File open

$file = fopen ($url, 'rb');if ($file) {    $newf = fopen ($newfname, 'wb');    if ($newf) {        while(!feof($file)) {            fwrite($newf, fread($file, 1024 * 8), 1024 * 8);        }    }}if ($file) {    fclose($file);}if ($newf) {    fclose($newf);}

$newfname = '../public/storage/image.'.File::extension(public_path($url));
File::extension(public_path($url)) 取得副档名

Storage

Storage 是 laravel写好的 Facades. 用 put/get 存取档案
Storage将档案存在storage/app/public目录下,当我们执行php artisan storage:link,会建立一个 symbolic link,从 public/storage 连结到真正存档的地方(storage/app/public)。

用 Storage 介面
$contents = file_get_contents($url);$name = substr($url, strrpos($item_info->pic, '/') + 1);//从url取得档名$stored = Storage::put('public/'.$name, $contents);

存 client 上传的图

用 store method
$imageURL = request()->file('img')->store('public');$reward->update(['reported_descript'=>$request->reported_descript,'img'=>asset('storage/' . substr($imageURL, 7))]);

读取档案

fopen

$file=fopen('../public/storage/'.explode('/', $item->img)[4], 'r');$contents = fread($file,filesize('../public/storage/'.explode('/', $item->img)[4]));

Storage

$contents = Storage::get('public/'.explode('/', $item->img)[4]);

送出档案:

用 Guzzle 套件来发送带有图片的 request:

$file=fopen('../public/storage/'.explode('/', $item->img)[4], 'r');$contents = fread($file,filesize('../public/storage/'.explode('/', $item->img)[4]));$deliever_photo = new Client([    'headers' => ['Authorization' => "Bearer ".env('STATION_KEY'),                'Content-Type' => 'multipart/form-data']]);$response_img = $deliever_photo->request('POST', env('STATION_BASE_URL').'/api/image',['multipart' => [    [        'name'     => "good_id",        'contents' => $response_de->id    ],    [        'name'     => "photo",        'contents' => $contents,        'filename' => $name,        'headers' => ['Content-Type' => 'image/png']    ],]]);

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章