ThinkPHP3.2 实现阿里云OSS上传文件

0、配置文件Config,加入OSS配置选项,设置php.ini最大上传大小(自行解决,这里不做演示)

'OSS' => array(
        'ACCESS_KEY_ID' => '**************', //从OSS获得的AccessKeyId
        'ACCESS_KEY_SECRET' => '**************', //从OSS获得的AccessKeySecret
        'ENDPOINT' => 'oss-cn-beijing.aliyuncs.com', //您选定的OSS数据中心访问域名,例如oss-cn-hangzhou.aliyuncs.com
        'BUCKET'=>'ycwlwhg'
    ),

1、index.html

<form action="{:U('Home/Oss/post')}" method="post" enctype="multipart/form-data">

        <input type="text" name="dir" placeholder="文件夹">

         <input type="file" name="file[]" multiple />

        <input type="submit" value="上传">

</form>

2、下载阿里云OSS的PHPSDK ,放置于ThinkPHP/Library/Vendor/下,起名叫OSS,图示

191837_xKfN_3578722.png

3、上传类

 

<?php

namespace Home\Controller;

use OSS\Core\OssException;
use OSS\OssClient;
use Think\Controller;

class OssController extends Controller
{
    public function index()
    {
        $this->display();
    }

    //获取文件名
    //true 文件名  false后缀
    function retrieve($file, $type = true)
    {
        $arr = explode('.', $file);
        if ($type) {
            return $arr[0];
        } else {
            return $arr[1];
        }

    }


    function Directory($dir)
    {
        if (is_dir($dir) || @mkdir($dir, 0777)) { //查看目录是否已经存在或尝试创建,加一个@抑制符号是因为第一次创建失败,会报一个“父目录不存在”的警告。
            //echo $dir . "创建成功<br>";  //输出创建成功的目录
        } else {

            $dirArr = explode('/', $dir); //当子目录没创建成功时,试图创建父目录,用explode()函数以'/'分隔符切割成一个数组
            array_pop($dirArr); //将数组中的最后一项(即子目录)弹出来,
            $newDir = implode('/', $dirArr); //重新组合成一个文件夹字符串
            $this->Directory($newDir); //试图创建父目录
            @mkdir($dir, 0777);

        }
    }

    public function post()
    {

        //要上传至OSS的文件夹路径  如  dir/dir1/dir2
        $dir                = I('dir');

        $upload             = new \Think\Upload();// 实例化上传类
        $upload->maxSize    = 3145728;// 设置附件上传大小
        $upload->rootPath   = './Public/'; // 设置附件上传根目录
        $upload->savePath   = '/uploads/'; // 设置附件上传(子)目录

        vendor('OSS.autoload');
        $ossConfig          = C('OSS');
        $accessKeyId        = $ossConfig['ACCESS_KEY_ID'];//阿里云OSS  ID
        $accessKeySecret    = $ossConfig['ACCESS_KEY_SECRET'];//阿里云OSS 秘钥
        $endpoint           = $ossConfig['ENDPOINT'];//阿里云OSS 地址
        $ossClient          = new \OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint);
        $bucket             = $ossConfig['BUCKET']; //oss中的文件上传空间

        $info               = $upload->upload();

        if (!$info) {// 上传错误提示错误信息
            //处理上传错误信息
            $this->error($upload->getError());
        } else {// 上传成功

            foreach ($info as $k => $v){
                $object     = $dir . '/' . $v['name'];//想要保存文件的名称

                //这个数组是存上传成功以后返回的访问路径,多文件时使用implode函数将其组合

                $downlink[] = $bucket.'.'.$endpoint.'/'.$object;

                $file       = './Public' . $info[$k]['savepath'] . $v['savename'];//本地文件路径

                try {
                    $ossClient->uploadFile($bucket, $object, $file);
                    //上传成功
                    //这里可以删除上传到本地的文件。
                    unlink($file);

                } catch (OssException $e) {
                    //上传失败
                    printf($e->getMessage() . "\n");
                    return;
                }
            }
        }
    }

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值