在Laravel中保存来自外部URL的图像



我想在S3中使用URL保存图像。

下面是我的代码:
public function uploadFromUrl(string $url, string $path, string $filename): string
{
$contents = file_get_contents($url);
$storage_disk = 'local' === config('app.env') ? 'public' : 's3';
Storage::disk($storage_disk)->putFile($filename, $contents);
if ('production' === config('app.env')) {
$url = Storage::disk($storage_disk)->url($path.'/'.$filename);
return str_replace(config('filesystems.disks.s3.url'), config('filesystems.disks.s3.cloudfront_url'), $url);
}
return Storage::disk($storage_disk)->url($path.'/'.$filename);
}

下面是url(示例):https://scontent-lhr8-1.cdninstagram.com/v/t51.2885-15/67382942_125369622063864_5790726279801419518_n.jpg?_nc_cat=106&ccb=1-7&_nc_sid=8ae9d6&_nc_ohc=pN7mDdfhZ5oAX_5m3qK&_nc_ht=scontent-lhr8-1.cdninstagram.com&edm=ANo9K5cEAAAA&oh=00_AT-sSvo7gKRJbm_xWo0Giayjxt9jDmX7SnOKc0ZuoVW44A&oe=62BEB3B2

我收到以下错误:

代码:"INVALID_ARGUMENT_EXCEPTION"消息:"格式错误的UTF-8字符,可能编码错误">

put()代替putFile()

Storage::disk($storage_disk)->put($filename, $contents);

put ()

public function put($path, $contents, $lock = false)
{
return file_put_contents($path, $contents, $lock ? LOCK_EX : 0);
}

最新更新