如何实现阿里云OSS文件上传的前端多种方法?
摘要:介绍了文件上传到阿里云OSS的几种方法,主要是前端直接上传或者是配合php进行上传,各有特点。使用php-sdk的话,流程是将文件上传到了服务器一次了,然后php在服务器中调用了阿里的sdk再将文件传到了OSS,小文件就无所谓了。要是上传大
目录零、准备一、服务端签名后直传1. 阿里云控制台配置2. 后端接口开发(PHP)3. 前端获取签名后上传二、使用STS临时凭证进行上传1. 后端接口开发(node)2. 前端获取临时token再通过sdk进行上传三、前端签名,使用PostObject直接上传(可配合使用STS)1.应用场景四、直接在前端使用sdk进行上传五、中转上传到应用服务器再上传到阿里云OSS六、错误七、小结
零、准备
要是实现将文件上传到阿里云OSS,首先就要开通了OSS服务,然后创建bucket之类的。这些就不多说了。
稍微看了下文档就能看见有accessKeyId,accessKeySecret,endpoint,bucket等之类的。这些要哪里来呢。
accessKeyId,accessKeySecret
在控制台找到RAM访问控制它大概长下面这样,在这里创建用户,就能得到accessKeyId,accessKeySecret了。注意:accessKeySecret只会显示一次,你创建的时候就要保存起来,要不然就要重创了。
然后就要给创建的用户权限,然后才能操作OSSAPI。
然后就是endpoint,bucket这些了,要在'对象存储 OSS'页面中拿。
Bucket列表能看到Bucket的名称,在每个bucket的概览里就能看到endpoint之类的了。
结合PHP(或者纯前端)主要介绍三种不同的向OSS上传文件的方式,都是用过或者踩过坑的😂。
一、服务端签名后直传
优点:官方文档
使用插件(如,element upload, web uploader等)上传,不用重写上传方法,通过地址提交,可以方便的使用插件提供的功能。
前端值传不进过应用服务器中传,效率更高,而且前端也能方便获取上传进度。
需要后端进行签名,前端获取签名后再去上传,也不会暴露accessKeySecret,accessKeyId等oss信息。
1. 阿里云控制台配置
创建跨越规则,否则web前端上传的时候会报CORS跨越错误。** 具体操作如下图:
2. 后端接口开发(PHP)
可以参考下官方示例代码(PHP),然后我们按照自己需要进行修改就基本上能实现了。这里是修改后的代码,因为只需将视频上传到OSS中,而且上传后的地址也是知道的,所以就注释了上传回调相关的操作,代码如下:
use DateTime;
class ContentsController extends Controller {
// 阿里云oss配置
private $accessKeyId = 'xxxxxxxx'; // 请填写您的AccessKeyId
private $accessKeySecret = 'xxxxxx'; // 请填写您的AccessKeySecret
private $bucket= "your-bucketName";
private $endpoint = "oss-cn-hangzhou.aliyuncs.com";
public function gmt_iso8601($time)
{
$dtStr = date("c", $time);
$mydatetime = new DateTime($dtStr);
$expiration = $mydatetime->format(DateTime::ISO8601);
$pos = strpos($expiration, '+');
$expiration = substr($expiration, 0, $pos);
return $expiration . "Z";
}
// 阿里云签名接口
// 调用该接口可传入要上传到的文件夹dir
public function signature() {
{
$id = $this -> accessKeyId; // 请填写您的AccessKeyId。
$key = $this -> accessKeySecret; // 请填写您的AccessKeySecret。
