PHP实现阿里OSS文件上传

本文介绍了如何使用阿里云OSS进行文件上传,包括PHP代码示例,涉及AccessKeyID、SecretKey、上传策略和回调函数的配置。
摘要由CSDN通过智能技术生成

OSS,全称 Object Storage Service,是阿里云提供的一种海量、安全、低成本、高可靠的云存储服务。可以用来存储和处理各种非结构化数据(如图片、音频、视频、日志等)。本文主要介绍如何利用OSS进行文件上传。

可以参考下官方示例代码,然后我们按照自己需要进行修改就基本上能实现了。这里是修改后的代码,因为只需将视频上传到OSS中,而且上传后的地址也是知道的,所以就注释了上传回调相关的操作,代码如下:

<?php
namespace app\oss\controller;
use app\common\controller\BaseController;
use app\common\controller\Common;

class Index extends BaseController
{
    private $id = '';// 请填写您的AccessKeyId。
    private $key = '';// 请填写您的AccessKeySecret。
    private $host = "";// $host的格式为 bucketname.endpoint
    private $callbackUrl = '';

    function gmt_iso8601($time)
    {
        return str_replace('+00:00', '.000Z', gmdate('c', $time));
    }

    function callback()
    {
        $data = $this->getArgsList(['filename', 'mimeType', 'size', 'height', 'width']);
        $data['url'] = $this->host . '/' . $data['filename'];
        echo json_encode(Common::errorArray(0,"ok",$data));
    }

    /**
     * 获取oss上传信息
     */
    function getOss()
    {
        $dir = date('Ymd') . '/';          // 用户上传文件时指定的前缀。

        $callback_param = array(
            'callbackUrl' => $this->callbackUrl,
            'callbackBody' => 'filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}',
            'callbackBodyType' => "application/x-www-form-urlencoded"
        );
        $callback_string = json_encode($callback_param);

        $base64_callback_body = base64_encode($callback_string);
        $now = time();
        $expire = 30;  //设置该policy超时时间是10s. 即这个policy过了这个有效时间,将不能访问。
        $end = $now + $expire;
        $expiration = $this->gmt_iso8601($end);

        //最大文件大小.用户可以自己设置
        $condition = array(0 => 'content-length-range', 1 => 0, 2 => 1048576000);
        $conditions[] = $condition;

        // 表示用户上传的数据,必须是以$dir开始,不然上传会失败,这一步不是必须项,只是为了安全起见,防止用户通过policy上传到别人的目录。
        $start = array(0 => 'starts-with', 1 => '$key', 2 => $dir);
        $conditions[] = $start;

        $arr = array('expiration' => $expiration, 'conditions' => $conditions);
        $policy = json_encode($arr);
        $base64_policy = base64_encode($policy);
        $string_to_sign = $base64_policy;
        $signature = base64_encode(hash_hmac('sha1', $string_to_sign, $this->key, true));

        $response = array();
        $response['ossaccessKeyId'] = $this->id;
        $response['host'] = $this->host;
        $response['policy'] = $base64_policy;
        $response['signature'] = $signature;
        $response['expire'] = $end;
        $response['callback'] = $base64_callback_body;
        $response['dir'] = $dir;  // 这个参数是设置用户上传文件时指定的前缀。
        echo json_encode(Common::errorArray(0,"ok",$response));
    }

}

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

swoole~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值