Laravel6.x上传图片到七牛云

作者: 温新

分类: 【Laravel】

阅读: 2157

时间: 2021-02-10 09:12:49

Laravel6.x如何上传图片至七牛云?使用外部存储来存储图片等资源有这样几处优势:利于网站维护、缓解服务器压力。

在使用七牛云来存储之前,需要做如下准备工作:

注册七牛账号;

购买对象存储资源;

创建公共空间。我这里没有使用测试域名,而使用通过备案的域名进行绑定,也就是绑定真实域名。

准备工作完成之前下面开始使用代码工作。

第一步:下载安装包

<span style="color: rgb(255, 255, 255);">composer require zgldh/qiniu-laravel-storage</span><br></br>

我这里使用了一个第三方包,此包是在官方SDK基础上进行了封装,若需要快速开发,使用扩展包更为方便快速,这个过程中,几乎感受到不是上传到了七牛云。当然了,也可以直接使用官方SDK。

第二步:配置服务

文件配置:config/app.php文件中的providers数组中添加如下配置:

<span style="color: rgb(255, 255, 255);">zgldh\QiniuStorage\QiniuFilesystemServiceProvider::class</span><br></br>

第三步:配置驱动

<span style="color: rgb(40, 44, 52); font-family: 宋体, "Times New Roman", Times, Georgia, serif; font-size: 14px; orphans: 4; text-align: justify; white-space: pre-wrap; word-spacing: 0.7px; background-color: rgb(254, 254, 254);">文件位置:config/filesystems.php

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'disks'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> [</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">/**</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">* 此处省略自带的配置</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">**/</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'qiniu'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> [</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'driver'</span>  <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'qiniu'</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'domains'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> [</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">                <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'default'</span>   <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'test.com'</span>,      <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">//绑定的真实域名,当然了,我写出的是假的</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">                <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'https'</span>     <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'test.com'</span>,         <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">//你的HTTPS域名</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">                <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'custom'</span>    <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'可不填'</span>,                <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">//Useless 没啥用,请直接使用上面的 default 项</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">             ],</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'access_key'</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'**********'</span>,      <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">//AccessKey</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'secret_key'</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'*********'</span>,      <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">//SecretKey</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'bucket'</span>    <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'对象存储空间名'</span>,        <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">//Bucket名字</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'notify_url'</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'使用简单的图片上传,可不填'</span>,  <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">//持久化处理回调地址</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'access'</span>    <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'public'</span>,  <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">//空间访问控制 public 或 private</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'hotlink_prevention_key'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'可不填'</span>, <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// CDN 时间戳防盗链的 key。 设置为 null 则不启用本功能。</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        ],</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    ],</span>

关于如何操作,都有着详细的方法介绍,这是参考地址 https://packagist.org/packages/zgldh/qiniu-laravel-storage

第步四:路由与方法

路由

<span style="color: rgb(255, 255, 255);">Route::post('uploader/qiniu','Admin\UploaderController@qiNiuUpload');</span><br></br>

方法

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">   public <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> qiNiuUpload(Request <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$request</span>)</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">if</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$request</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-</span>>hasFile(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'file'</span>)) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$filename</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> sha1(time().<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$request</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-</span>>file(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'file'</span>)->getClientOriginalName()) . <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'.'</span> . <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$request</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-</span>>file(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'file'</span>)->getClientOriginalExtension();</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            Storage::disk(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'qiniu'</span>)->put(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$filename</span>,file_get_contents(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$request</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-</span>>file(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'file'</span>)->path()));</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            // 七牛文件路径<br></br>           // 这一代码就是上传到七牛云的关键代码,其中调用了依赖包封装的方法<br></br></span><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">           <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$filePath</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> Storage::disk(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'qiniu'</span>)->getDriver()->downloadUrl(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$filename</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$result</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> [</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">                <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'code'</span>   <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span>>  <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">200</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">                <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'succMsg'</span>   <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span>>  <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'上传成功'</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">                <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'urlpath'</span>   <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span>>  <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$filePath</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            ];</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        return response()->json(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$result</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    }</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span>

我是仲夏

请登录后再评论