OSS直传与UXCore-Uploader实践

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文是我们OSS的用户自己写的一篇文章,笔者做了简单的修改。这里代发。感谢这位用户对OSS的了解如此深! 背景 视联网业务中,需要存储大量的图片、视频等素材资源,为应对这种大数据文件的存储,就接入了阿里云对象存储服务(Object Storage Service,简称 OSS)。

本文是我们OSS的用户自己写的一篇文章,笔者做了简单的修改。这里代发。感谢这位用户对OSS的了解如此深!

背景

视联网业务中,需要存储大量的图片、视频等素材资源,为应对这种大数据文件的存储,就接入了阿里云对象存储服务(Object Storage Service,简称 OSS)。

OSS的接入方式选择

WEB端直传

很多人采用的做法是用户在浏览器/APP上传到应用服务器,然后应用服务器再把文件上传到OSS。

practice_post_callback_1

该方法有如下缺点:

  • 上传慢

    • 先上传到应用服务器,再上传到OSS,网络传送多了一倍。
    • 如果数据直传到OSS,不走应用服务器,速度将大大提升,而且OSS是采用BGP带宽,能保证各地各运营商的速度。
  • 扩展性不好

    • 如果后续用户多了,应用服务器会成为瓶颈。
  • 费用高

    • 由于OSS上传流量是免费的。如果数据直传到OSS,不走应用服务器,那么将能省下几台应用服务器。

服务端签名后直传

practice_post_callback_5

相比上面这种WEB端直传方式,服务端签名直传的方式能够更好的解决相关痛点,符合业务需求。

使用UXCore-Uploader直传

UXCore-Uploader特性

  • md5(用于秒传)
  • 分片上传
  • html5-runtime,flash-runtime
  • 多种收集器

    • DndCollector
    • PasteCollector
    • PickerCollector
  • 拥抱es6

获取后端服务器签名

第一步,就是获取签名,这里封装成了一个方法。

getPolicy() {
  fetch('后端签名认证信息URL').then(res => {
    this.url = res.host;
    this.params = {
      signature: res.signature,
      expire: res.expire,
      OSSAccessKeyId: res.accessKeyId,
      policy: res.policy,
      dir: res.pictureDir,
      success_action_status: '200',
      'content-disposition': 'attachement'
    };
  });
}

OSS的签名参数,请参考服务端签名PostObject

UXCore-Uploader配置

因为项目中要求是视频和图片,所以需要对Uploader进行accept属性的配置,不然会导致上传失败,并把之前getPolicy中获取的数据进行传入。

<Uploader
 accept="avi,asf,wmv,mpeg,mpg,vob,mkv,mov,rmvb,mp4,bmp,jpg,gif,jpeg,png"
  // 其他项省略...
  url={this.url}
  params={this.params}
>

感觉一切OK,应该可以用了,但是问题出现了。

遇到问题

由于UXCore-Uploader配合fileList参数,需要对Response的数据有一个要求格式:

{
    name: '', // 文件名称,列表形式必填
    ext: '', // 文件扩展名。例如 jpg。可选,不填时无法根据类型展示对应图标
    fileType: '', // 文件 mimetypes 类型。 例如 image/jpg。 可选,不填时无法根据类型展示对应图标
    response: {
      url: xxx,  // 文件链接,必填
      canRemove: true, // 是否可以删除,可选
      downloadUrl: 'xxxx', // 下载 URL,可选
    },
  }

而OSS返回的数据默认并没有response字段,所以报错了。

pro1

pro2

解决方案

查看了UXCore-Uploader的源码,发现是基于UploadCore库做的封装,其中有一个钩子onfileuploadcompleting,可以实现对response字段的定制。

onfileuploadcompleting(FileResponse) {
  FileResponse.setResponse({
    content: {
      url: '',
      downloadUrl: '',
    },
    success: true,
  });
}

UploadCore详细说明请参考UploadCore

UploadCore中提供了onfileuploadpreparing,getPolicy可以放到这个地方执行。

onfileuploadpreparing: request => {
  fetch('后端签名认证信息URL').then(res => {
    request.setUrl(res.host);
    request.setParam('OSSAccessKeyId', res.accessKeyId);
    // 省略其他配置项...
   });
 }
}

上传完成后的相关信息,也需要在onfileuploadcompleted中去获取。

小结

本文简单描述了使用UXCore-Uploader进行OSS直传碰到的问题及解决办法。UXCore-Uploader的特性,可以成为一种更好的OSS直传选择。

Reference

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
目录
相关文章
|
对象存储
minio临时凭证直传切换到阿里云oss
minio临时凭证直传切换到阿里云oss
783 1
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
2926 1
|
对象存储
阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)
阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)
810 0
|
7月前
|
消息中间件 监控 数据挖掘
【有奖实践】轻量消息队列(原 MNS)订阅 OSS 事件实时处理文件变动
当你需要对对象存储 OSS(Object Storage Service)中的文件变动进行实时处理、同步、监听、业务触发、日志记录等操作时,你可以通过设置 OSS 的事件通知规则,自定义关注的文件,并将 OSS 事件推送到轻量消息队列(原 MNS)的队列或主题中,开发者的服务即可及时收到相关通知,并通过消费消息进行后续的业务处理。
144 90
|
9月前
|
弹性计算 人工智能 数据管理
AI场景下的对象存储OSS数据管理实践
本文介绍了ECS和OSS的操作流程,分为两大部分。第一部分详细讲解了ECS的登录、密码重置、安全组设置及OSSUTIL工具的安装与配置,通过实验创建并管理存储桶,上传下载文件,确保资源及时释放。第二部分则聚焦于OSSFS工具的应用,演示如何将对象存储挂载为磁盘,进行大文件加载与模型训练,强调环境搭建(如Conda环境)及依赖安装步骤,确保实验结束后正确清理AccessKey和相关资源。整个过程注重操作细节与安全性,帮助用户高效利用云资源完成实验任务。
911 161
|
6月前
|
关系型数据库 数据库 对象存储
Dify实践|Dify on DMS+对象存储OSS,实现多副本部署方案
本文介绍了在DMS上部署Dify的详细步骤,用户可选择一键购买资源或基于现有资源部署Dify,需配置RDS PostgreSQL、Redis、AnalyticDB for PostgreSQL等实例,并设置存储路径和资源规格。文中还提供了具体配置参数说明及操作截图,帮助用户顺利完成部署。
|
7月前
|
消息中间件 对象存储
轻量消息队列(原 MNS)订阅 OSS 事件实践
使用轻量消息队列订阅OSS事件,实时处理文件变动,赢取ins风U型枕(限量500个)。访问活动页面,完成实操并上传截图即可参与领奖。活动时间:即日起至2025年2月28日16:00。奖品数量有限,先到先得,快来报名吧!
112 2
|
9月前
|
存储 人工智能 开发工具
AI场景下的对象存储OSS数据管理实践
本文介绍了对象存储(OSS)在AI业务中的应用与实践。内容涵盖四个方面:1) 对象存储作为AI数据基石,因其低成本和高弹性成为云上数据存储首选;2) AI场景下的对象存储实践方案,包括数据获取、预处理、训练及推理阶段的具体使用方法;3) 国内主要区域的默认吞吐量提升至100Gbps,优化了大数据量下的带宽需求;4) 常用工具介绍,如OSSutil、ossfs、Python SDK等,帮助用户高效管理数据。重点讲解了OSS在AI训练和推理中的性能优化措施,以及不同工具的特点和应用场景。
805 10
|
10月前
|
弹性计算 数据管理 应用服务中间件
活动实践 | 借助OSS搭建在线教育视频课程分享网站
本教程指导用户在阿里云ECS实例上搭建在线教育网站,包括重置ECS密码、配置安全组、安装Nginx、创建网站页面、上传数据至OSS、开通OSS传输加速、配置生命周期策略及清理资源等步骤,实现高效、低成本的数据管理和网站运营。
活动实践 | 借助OSS搭建在线教育视频课程分享网站
|
8月前
|
存储 人工智能 数据管理
云端问道17期方案教学-AI场景下的对象存储OSS数据管理实践
本文介绍了AI场景下的对象存储OSS数据管理实践,由阿里云技术专家明锦分享。主要内容分为两部分:1) AI场景下对象存储实践方案,包括对象存储的应用、优势及在模型推理中的优化;2) OSS常用工具介绍,如OSSFS、Python SDK、Go SDK等,并详细说明了这些工具的特点和使用场景。文中还探讨了不同模式下的性能优化,以及即将推出的OS Connector for AI/ML工具,旨在提升数据下载速度和IO性能。
178 0

相关产品

  • 对象存储