有特点的昵称 發表於 2020-4-1 18:46:00

PHP 上传文件至阿里云OSS对象存储

<h3 id="简述">简述</h3>
<blockquote>
<p>1、阿里云开通对象存储服务 OSS 并创建Bucket<br>
2、下载PHP SDK至框架扩展目录,点我下载<br>
3、码上code</p>
</blockquote>
<h3 id="阿里云操作">阿里云操作</h3>
<h4 id="开通对象存储服务-oss">开通对象存储服务 OSS</h4>
<h4 id="创建-bucket">创建 Bucket</h4>
<p><img src="https://img2020.cnblogs.com/blog/1587296/202004/1587296-20200401204351432-726960240.png" alt="" loading="lazy"></p>
<h4 id="配置accesskey与access-key-secret">配置<code>AccessKey</code>与<code>Access Key Secret</code></h4>
<p>进入管理<code>AccessKey</code>页面 (可将鼠标放在右上角用户头像上,在弹出来的框中点击<code>AccessKey 管理</code>)</p>
<p><img src="https://img2020.cnblogs.com/blog/1587296/202004/1587296-20200401205634837-769164956.png" alt="" loading="lazy"></p>
<h4 id="找到bucket对应的外网访问节点">找到Bucket对应的外网访问节点</h4>
<p><img src="https://img2020.cnblogs.com/blog/1587296/202004/1587296-20200401210157004-460031577.png" alt="" loading="lazy"></p>
<h3 id="下载-php-sdk">下载 PHP SDK</h3>
<p>点我下载</p>
<p>SDK 参考</p>
<p>API参考</p>
<p>SDK 下载完成后放入框架对应的扩展目录</p>
<h3 id="上码">上码</h3>
<h4 id="config配置">config配置</h4>
<pre><code class="language-php">//阿里云OSS配置
'alioss'      =&gt;[
    'AccessKeyID'      =&gt; 'AccessKey ID',
    'AccessKeySecret'=&gt; 'Access Key Secret',
    'EndPoint'   =&gt; '外网访问地域节点',
    'Bucket'   =&gt; 'Bucket 名称',
],
</code></pre>
<h4 id="后端结合sdk实现文件上传至阿里云oss">后端结合SDK实现文件上传至阿里云OSS</h4>
<p>以ThinkPHP5为例</p>
<pre><code class="language-php">&lt;?php
namespace app\controller;

use think\Controller;
use think\Image;

require_once APP_PATH . '/../extend/aliyun-oss/autoload.php'; //引入阿里云OSS SDK,注意替换路径
use OSS\Core\OssException;
use OSS\OssClient;

class AliOssUpload
{

    /**
   * 文件上传接口
   *
   */
    public function uploadFile()
    {
      //接收上传文件
      $file = $this-&gt;request-&gt;file('file');
      $res = [];
      if($file){
            //调用阿里云OSS上传
            $res = self::AliuploadFile('img', $file);
            if ($res['code'] == 200) {
                //业务逻辑处理......
            }
      }else{
            $res['code']=0;
            $res['msg']='没有上传文件';
      }
      return json($res);
    }

    /**
   * 调用阿里云OSS SDK
   * @param $module 模块
   * @param $file 上传的文件
   * @return array 阿里云OSS上传处理结果
   *
   */
    public static function AliuploadFile($module, $file)
    {
      $resResult = Image::open($file);
      try {
            //获取OSS参数值
            $KeyId = config('alioss.AccessKeyID');
            $KeySecret = config('alioss.AccessKeySecret');
            $EndPoint = config('alioss.EndPoint');
            $Bucket = config('alioss.Bucket');
            //实例化
            $ossClient = new OssClient($KeyId, $KeySecret, $EndPoint);
            //sha1加密 生成文件名 连接后缀
            $fileName = $module . '/' . sha1(date('YmdHis', time()) . uniqid()) . '.' . $resResult-&gt;type();
            //执行阿里云上传
            $result = $ossClient-&gt;uploadFile($Bucket, $fileName, $file-&gt;getInfo()['tmp_name']);
            //图片地址:$result['info']['url']
            $arr = ['code' =&gt; 200, 'msg' =&gt; '上传成功', 'data' =&gt; $result['info']['url']];
      } catch (OssException $e) {
            $arr = ['code' =&gt; 0, 'msg' =&gt; $e-&gt;getMessage(), 'data' =&gt; ''];
      }
      return $arr;
    }
}
</code></pre>
<h4 id="前端参考代码">前端参考代码</h4>
<p>前端使用layui,谨慎参考</p>
<pre><code class="language-html">&lt;div class="layui-upload" id="upload-thumb"&gt;
    &lt;label class="layui-form-label"&gt;缩略图&lt;/label&gt;
    &lt;button type="button" class="layui-btn" id="thumb"&gt;上传图片&lt;/button&gt;
    &lt;div class="layui-upload-list"&gt;
      &lt;label class="layui-form-label"&gt;&lt;/label&gt;
      &lt;img class="layui-upload-img" id="demo1" width="150" height="150"&gt;
      &lt;p id="demoText"&gt;&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;




&lt;script&gt;
    //上传图片接口
    layui.use('upload', function(){
      var upload = layui.upload;
      //执行实例
      var uploadInst = upload.render({
            elem: '#thumb' //绑定元素
            ,url: "{:url('AliOssUpload/uploadFile')}" //上传接口
            ,data:{use:'article_thumb'}
            ,done: function(res){
                //上传完毕回调
                if(res.code == 200) {
                  //前台显示预览图
                  $('#demo1').attr('src',res.data);
                  $('#upload-thumb').append('&lt;input type="hidden" name="thumb" value="'+ res.data +'"&gt;');
                } else {
                  layer.msg(res.msg);
                }
            }
            ,error: function(){
                //请求异常回调
                //演示失败状态,并实现重传
                var demoText = $('#demoText');
                demoText.html('&lt;span style="color: #FF5722;"&gt;上传失败&lt;/span&gt; &lt;a class="layui-btn layui-btn-mini demo-reload"&gt;重试&lt;/a&gt;');
                demoText.find('.demo-reload').on('click', function(){
                  uploadInst.upload();
                });
            }
      });
    });
&lt;/script&gt;
</code></pre>


</div>
<div id="MySignature" role="contentinfo">
    let the world have no hard-to-write code^-^<br><br>
来源:https://www.cnblogs.com/ovim/p/12614614.html
頁: [1]
查看完整版本: PHP 上传文件至阿里云OSS对象存储