如何实现阿里云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。
阅读全文