在 Laravel 上将图片上传到阿里云 OSS 
                            
                                                    
                        
                    
                    
  
                    
                    上次我们学会了怎么将图片上传到七牛云,这次就学一学怎么将图片上传到阿里云OSS
上传之前当然需要去阿里云开通 对象存储OSS (后面就简称OSS),开通的细节我们就不说了。让我们回归主题,怎么将图片上传到OSS上。在这里我们选用了 jacobcyl/ali-oss-storage 扩展包,在项目根目录中运行:
composer require jacobcyl/ali-oss-storage然后在 config/app.php 文件中注册 Jacobcyl\AliOSS\AliOssServiceProvider :
'providers' => [
    // Other service providers...
    Jacobcyl\AliOSS\AliOssServiceProvider::class,
],然后需要在 config/filesystems.php 文件中的 disks 中添加OSS的配置信息
  'disks' => [
        'qiniu' => [
           'driver'     => 'qiniu',
           'access_key' => env('QINIU_ACCESS_KEY'),
           'secret_key' => env('QINIU_SECRET_KEY'),
           'bucket'     => env('QINIU_BUCKET'),
           'domain'     => env('QINIU_DOMAIN'),
        ],
        'oss' => [
            'driver'        => 'oss',
            'access_id'     => env('ALIYUN_ACCESS_ID'),
            'access_key'    => env('ALIYUN_ACCESS_KEY'),
            'bucket'        => env('ALIYUN_BUCKET'),
            'endpoint'      => env('ALIYUN_ENDPOINT'),
            'cdnDomain'     => env('ALIYUN_CDN_DOMAIN'),
            'ssl'           => env('ALIYUN_SSL'),
            'isCName'       => env('ALIYUN_IS_CNAME'),
            'debug'         => env('ALIYUN_DEBUG')
        ],然后在 .env 文件中进行配置
ALIYUN_ACCESS_ID=    //AccessKeyId
ALIYUN_ACCESS_KEY=    //AccessKeySecret
ALIYUN_BUCKET=    //OSS bucket名
ALIYUN_ENDPOINT=    // OSS 外网节点或自定义外部域名
ALIYUN_CDN_DOMAIN=    //如果isCName为true, 获取url时会判断cdnDomain是否设定来决定返回的url,如果cdnDomain未设置,则使用endpoint来生成url,否则使用cdn
ALIYUN_SSL=    //<true|false>  是否使用https
ALIYUN_IS_CNAME=    //<true|false> 是否使用自定义的域名 对应上面的 ALIYUN_CDN_DOMAIN
ALIYUN_DEBUG=     //<true|false>由于OSS的外网请求流量也是要单独收费的所以我们使用内网来进行访问,内网是免费的。
ALIYUN_ENDPOINT的格式为:oss-cn-hongkong.aliyuncs.com要对应自己的OSS地区。可以在OSS的控制台中查看每个bucket的完整配置。因为OSS的图片访问规则为ALIYUN_BUCKET+ALIYUN_ENDPOINT所以一定要填对。ALIYUN_CDN_DOMAIN则是我们自己绑定的域名。一般OSS图片的完整访问路径格式为https://test.oss-cn-hongkong.aliyuncs.com/avatar/8GdIcz1NaCZ.jpeg很长且不好看,所以我们可以绑定一个自己的域名。最后的格式为https://www.baicu.com/avatar/8GdIcz1NaCZ.jpeg是不是就熟悉多啦。
接下来我们就可以进行使用啦。由于我们不止一处地方用到上传图片,我们可以把上传图片写入到 自定义的辅助函数文件 中。
<?php 
use Illuminate\Support\Facades\Storage;
/**
 * 上传图片到阿里云
 *
 * @param   $path   要保存的路径
 * @param   $file   上传的文件
 * @param   $drive  要使用的驱动
 * @return  url     图片完全路径
 */
function upload_image($path, $file, $drive = 'oss')
{
    $disk = Storage::disk($drive);
    //将图片上传到OSS中,并返回图片路径信息 值如:avatar/WsH9mBklpAQUBQB4mL.jpeg
    $path = $disk->put($path, $file);
    //由于图片不在本地,所以我们应该获取图片的完整路径,
    //值如:https://test.oss-cn-hongkong.aliyuncs.com/avatar/8GdIcz1NaCZ.jpeg
    return $disk->url($path);
}我们的文件路径不存在时是会自动创建的,所以不需要我们手动创建
如果使用自己的域名并且报以下错误:
Arguments
1.  ":  RequestId: 5DB526470C5171C2446FC735"我们需要在 OSS控制台中将自己要使用的域名与OSS进行绑定。

绑定了之后可能会需要等待几分钟的时候才会生效,所以不要着急。如果成功,则返回结果为:
https://www.baidu.com/avatar/201910/27/1/ysf3RP9siklpAQUBQB4mL.jpeg这时我们可以去OSS文件管理里面就可以看到我们刚刚上传的图片啦。
到此我们就成功啦!需要上传的时候只需要这样调用就行啦!
$path = 'avatar/' . date("Ym/d", time());
$image_path = upload_image($path, $request->avatar);我们可以整合 上一篇 文章,上传到七牛云也合并进来,只需要修改 app/helpers.php 文件
<?php 
use Illuminate\Support\Facades\Storage;
/**
 * 上传图片到七牛云
 *
 * @param   $path   要保存的路径
 * @param   $file   上传的文件
 * @return  url     图片完全路径
 */
function upload_image($path, $file, $drive = 'oss')
{
    if (!$path) return false;
    $disk = Storage::disk($drive);
    $path = $disk->put($path, $file);
    switch ($drive) {
        case 'qiniu':
            return $disk->getUrl($path);
        case 'oss':
            return $disk->url($path);
    }
}我们可以这样调用
//上传到七牛云
$path = 'avatar/' . date("Ym/d", time());
$image_path = upload_image($path, $request->avatar,'qiniu');
//上传到OSS
$path = 'avatar/' . date("Ym/d", time());
$image_path = upload_image($path, $request->avatar);大功告成!当然里面还有很多细节问题,需要自己去处理啦。
 
           
         
             
             
             
             
             
             
             
             
             
             
             
                     
                     
             
             
            


 
             
             
             
             报错没找到原因
报错没找到原因
 
         
            

 
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: