阿里云OSS对象存储对接


一、需求背景

2020年9月份左右,公司需要开发一个资料管理系统,存储内部及行业资料。资料类型包括视频、Office文档、图片、PDF、资料压缩包。考虑到所有文件都能在线预览、文件加密、上传、下载等需求,故采用了阿里云OSS对象存储。

二、解决方案简介

文件加密采用sign加密读取,具有时效性。视频等大型文件上传,使用分片上传,也可断点续传。资料压缩包中存在多个文件,使用OSS的数据处理ZIP包解压,通过配置,自动解压符合条件的zip包。文件预览采用OSS的IMM预览,可直接在浏览器打开Office文档。

三、解决方案详细

建议开发者在对接OSS产品之前,可先自己开一个阿里云账号进行对接测试,这样就不会影响公司目前正在运行的业务。在对接过程中,有相关问题无法解决时,可通过平台提交工单,协助解决问题。

1、文件加密,首先在OSS创建的backet,需要为“私有”,设置为私有后,上传文件需要设置headers。
// 上传时可以设置相关的headers,例如设置访问权限为private和自定义元信息。
$options = array(
    OssClient::OSS_HEADERS => array(
        'x-oss-object-acl' => 'private',
    ),
);

设置后,该文件访问需要sign签名,过期时间可设置。

2、压缩包自动解压,并列举子文件

 1)、在阿里云平台配置ZIP包解压
image
前缀:文件名前缀符合条件时,如zip_aa.zip,则会触发条件,自动解压。
目标目录:并将文件解压到unzip目录下。
image
 2)、文件上传成功后,调用listObjects得到该解压文件夹的所有文件
列举文件 - 对象存储 OSS:https://help.aliyun.com/document_detail/88510.html

3、Office文档(doc、xls、ppt)的预览

Office文档预览有两种方式,第一种通过Microsoft提供的预览服务,
https://view.officeapps.live.com/op/view.aspx?src=路径, 第二种通过OSS的IMM预览。
第一种和第二种的区别是,第一种更加清晰,并免费,但稳定性不如IMM(国外服务)。建议两种方式都兼容,如果第一种无法使用,则可以快速切换到第二种。
在backet左侧菜单的数据处理->智能媒体开启IMM预览。

4、大型文件上传,建议使用客户端直传(获取临时上传凭证后,进行上传)方式,支持Vue。以下简述vue-simple-uploader + php实现阿里云OSS分片上传。

 1)、配置好simple-uploader相关参数(每片上传大小、并发上传数、上传地址),并配置好上传成功回调函数、文件添加回调函数。
 2)、通过simple-uploader传递的identifier(上传唯一识别码)、chunkNumber(当前上传的第几片)、totalChunks(总片数),对这些数据在PHP进行处理。
 3)、在PHP中,chunkNumber=1时,则是第一片,需要初始分片任务,并上传分片。初始化后,会得到OSS的object(文件路径)与uploadID(分片任务标识ID),将这两个值通过redis存储,以identifier为主键。
 4)、chunkNumber!=1且不等于最后一片时,则上传片,上传片之前,通过identifier得到之前的uploadID。
 5)、chunkNumber等于最后一片时,则合并片完成上传,返回object至前端,销毁redis存储的临时内容。


开发对接中遇到问题,欢迎联系作者,谢谢!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM