aliyun-oss-sdk阿里云OSS视频上传(断点续传)前端实现

这篇具有很好参考价值的文章主要介绍了aliyun-oss-sdk阿里云OSS视频上传(断点续传)前端实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题背景

最近上传视频的功能,突然炸了,两年没动的代码,突然不行辽,首次上传成功,后面继续上传就可以,但凡有一次上传失败,再上传文件就不行。

这里博主使用的是凭证上传方式哈。

凭证上传

官方文档:Web(JavaScript)上传SDK

查看了官方文档,确实是提到了,如使用1.5.3之前版本重新上传,请修改待上传文件名称,不要与上传中断的文件重名,避免报错。

aliyun-sdk-oss,阿里云,前端,云计算

项目使用的确实是1.5.0版本,所以我首先是把upload-sdk升级到了1.5.5

如果需要下载对应版本,可以看这里:Javascript上传SDK

upload-sdk升级之后,oss-sdk用的依然是6.8.0,这时候上传还是不行,首次上传可以成功,但是如果有重复名称的文件,再次上传,就会一直失败,报404

aliyun-sdk-oss,阿里云,前端,云计算

升级版本

询问了阿里云技术人员,被告知1.5.5对应的是6.17.1,所以又升级了oss-sdk。

更新了版本之后,如果是新文件,上传和续传没问题了,只是如果文件名字和之前的相同,上传会报403,续传会报404

aliyun-sdk-oss,阿里云,前端,云计算

aliyun-sdk-oss,阿里云,前端,云计算

这是缓存引起的,在new AliyunUpload.Vod({}) 的地方,新增个 localCheckpoint: true ,并且把本地存储清空,就可以了,或者也可以重命名文件。文章来源地址https://www.toymoban.com/news/detail-728469.html

代码

createUploader (i) {
        let self = this
        let uploader = new AliyunUpload.Vod({
          timeout: 60000,
          partSize: 1048576, // 分片大小默认1M,不能小于100K
          parallel: 5, // 并行上传分片个数,默认5
          retryCount: 3, // 网络原因失败时,重新上传次数,默认为3
          retryDuration: 2, // 网络原因失败时,重新上传间隔时间,默认为2秒
          region: "cn-shanghai", // 上传到点播的地域
          userId: "190917894512121",
          localCheckpoint: true,//此参数是禁用服务端缓存,不影响断点续传
          // 开始上传
	  // 如果是 UploadAuth 上传方式, 需要调用 uploader.setUploadAuthAndAddress 方法
          // 如果是 UploadAuth 上传方式, 需要根据 uploadInfo.videoId是否有值,调用点播的不同接口获取uploadauth和uploadAddress
	  // 如果 uploadInfo.videoId 有值,调用刷新视频上传凭证接口,否则调用创建视频上传凭证接口
	  // 如果 uploadInfo.videoId 存在, 调用 刷新视频上传凭证接口(https://help.aliyun.com/document_detail/55408.html)
          // 如果 uploadInfo.videoId 不存在,调用 获取视频上传地址和凭证接口(https://help.aliyun.com/document_detail/55407.html)
          onUploadstarted: function (uploadInfo) {
            if (!uploadInfo.videoId) {
              uploadVideoAuthApi(self.vedioData[i]).then((res) => {
                self.uploadDisabled = true
                let { uploadAuth, uploadAddress, videoId } = res.data.operateCallBackObj;
                uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress, videoId);
                uploader.startUpload()
              })
            } else {
	      // 如果videoId有值,根据videoId刷新上传凭证
              refreshUploadVideoAuthApi(uploadInfo.videoId).then(res => {
                let {uploadAuth, uploadAddress, videoId} = res.data.operateCallBackObj
                uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress, videoId)
                uploader.startUpload()
              })
            }
          },
          // 文件上传成功
          onUploadSucceed: function (uploadInfo) {
            console.log("onUploadSucceed: " + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
            self.statusText = '文件上传成功!'
          },
          // 文件上传失败
          onUploadFailed: function (uploadInfo, code, message) {
            console.log("onUploadFailed: file:" + uploadInfo.file.name + ",code:" + code + ", message:" + message)
            self.statusText = '文件上传失败!'
          },
          // 取消文件上传
          onUploadCanceled: function (uploadInfo, code, message) {
            console.log("Canceled file: " + uploadInfo.file.name + ", code: " + code + ", message:" + message)
            self.statusText = '文件已暂停上传'
          },
          // 文件上传进度,单位:字节, 可以在这个函数中拿到上传进度并显示在页面上
          onUploadProgress: function (uploadInfo, totalSize, progress) {
            console.log("onUploadProgress:file:" + uploadInfo.file.name + ", fileSize:" + totalSize + ", percent:" + Math.ceil(progress * 100) + "%")
            let progressPercent = Math.ceil(progress * 100)
            self.authProgress = progressPercent
            self.statusText = '文件上传中...'
          },
          // 上传凭证超时
          onUploadTokenExpired: function (uploadInfo) {
            // 上传大文件超时, 如果是上传方式一即根据 UploadAuth 上传时
            // 需要根据 uploadInfo.videoId 调用刷新视频上传凭证接口(https://help.aliyun.com/document_detail/55408.html)重新获取 UploadAuth
            // 然后调用 resumeUploadWithAuth 方法, 这里是测试接口, 所以我直接获取了 UploadAuth
            let refreshUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/RefreshUploadVideo?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&Title=haha1&FileName=xxx.mp4&VideoId=' + uploadInfo.videoId
            axios.get(refreshUrl).then(({data}) => {
              let uploadAuth = data.UploadAuth
              uploader.resumeUploadWithAuth(uploadAuth)
              console.log('upload expired and resume upload with uploadauth ' + uploadAuth)
            })
            self.statusText = '文件超时...'
          },
          // 全部文件上传结束
          onUploadEnd: function (uploadInfo) {
            console.log("onUploadEnd: uploaded all the files")
            self.statusText = '文件上传完毕'
          }
        })
   return uploader
}

到了这里,关于aliyun-oss-sdk阿里云OSS视频上传(断点续传)前端实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 阿里云OSS上传视频,可分片上传

    uniappH5实现 阿里云OSS上传视频  示例图: 上传视频完整示例代码: 使用npm安装SDK开发包,安装命令为 accessKeyId 和 accessKeySecret 还有 bucket 替换成你的就行。 multipartUpload 的第一个入参是: 文件路径 + 文件名称 第二个入参是文件对象

    2024年02月01日
    浏览(25)
  • 微信小程序 - 超详细 “纯前端“ 将文件上传到阿里云 OSS,最新阿里云 OSS 直传音视频、图片、word、excel、ppt、office 文档(全程无需后端,前端文件直传阿里云oss服务器)

    网上的教程乱七八糟却文件少代码(并且没注释),而且都已经很老了,对于新手来说真的无从下手。 本文站在新手小白的角度, 实现微信小程序开发中,“前端直传” 上传文件到阿里云oss对象存储的详细教程, 无需后端 (纯前端自己完成所有签名、上传),保证 100% 成

    2024年02月13日
    浏览(120)
  • uniapp - [小程序 / H5网页] “纯前端“ 将文件上传到阿里云 OSS,全端通用的阿里云 OSS 直传音视频、图片、word、excel、ppt、office 文档(全程无需后端稳定可靠)

    网上的教程乱七八糟各种坑,而且 uniapp 各个端都是不同的教程,对于新手来说真的无从下手。 本文站在新手小白的角度, 实现 uniapp 小程序 / H5 网页等平台的开发中,“前端直传” 上传文件到阿里云oss对象存储的详细教程,通用的 “OSS 上传器”,几乎全平台都可以使用!

    2024年02月12日
    浏览(36)
  • Spring Cloud Feign MultipartFile文件上传踩坑之路(包含前端文件上传请求、后端文件保存到aliyun-oss文件服务器)

    文件上传组件用的是ant-design的a-upload组件,我的界面如下所示: 文件上传请求API: FileUtils.js 需要注意的只有FileUtils.js定义的uploadApi请求函数,其中 URL 为后端请求接口(“/imageConvert/upload”),文件上传方法必须定义为 POST ,在 headers 加入’Content-type’: ‘multipart/form-data’,后端

    2024年02月12日
    浏览(34)
  • 阿里云OSS文件上传

    需求分析:实现文件上传与下载 ,与SprinCloud Alibaba整合 步骤一:注册帐号 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台  第二步:创建Bucket  第三步,创建Accesskey  注意:创建时候一定记得复制帐号密码,密码只在创建成功后显示一次! 第四步:安装对象存储

    2024年01月24日
    浏览(46)
  • 文件上传对接阿里云OSS

    1.首先注册登陆阿里云,在产品里找到oss服务  2.点击开通oss服务后,可以看到oss服务面板  3.创建一个Bucket文件存储桶 Bucket 相当于 dir =bbs/avatar 用作文件隔离 4.java对接oss服务 找到java SDK 5.导入SDK的依赖  如果使用的是Java 9及以上的版本,则需要添加jaxb相关依赖。添加jaxb相关

    2024年02月05日
    浏览(41)
  • 阿里云oss分片上传示例

    oss文件服务器分片上传官方文档参考 : 分片上传 - 对象存储 OSS - 阿里云 官方文档写的更加详细,更多内容请参考官方文档 1.初始化分片事件,向oss服务器获取全局唯一的uploadId 获取uploadId,后续分片都需带上uploadId,标识同一个文件对象。 另外初始化操作时已经指定文件访问链

    2024年02月16日
    浏览(39)
  • 阿里云对象存储OSS文件上传

    阿里云oss地址: 对象存储OSS_云存储服务_企业数据管理_存储-阿里云 阿里云对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,提供12个9的数据持久性,99.995%的数据可用性和多种存储类型,适用于数据湖存储,数据迁移,企业数据管理,数据处理等多种场景,可对

    2024年02月12日
    浏览(32)
  • Golang操作阿里云OSS上传文件

    为什么要使用OSS?应用场景是什么? 最近在开发考试系统,里面需要上传课件,课件包括pdf,map等等各种类型的文件,这些文件不能像图片一样,直接上传到项目目录下面,需要单独存放,阿里云就提供了存储方式,然后OSS是其中的一种,可以用来存储一些文件。 我们需要

    2024年02月02日
    浏览(35)
  • springboot整合阿里云oss实现文件上传

    通过阿里云oss进行文件上传,首先需要开通相关的服务,这边就不在具体说明,不懂的可以百度看一下。 阿里云oss有几个关键的参数,这也是后续通过java进行上传所需要的参数,分别是endpoint(域结点)、AccessKey ID(秘钥id)、AccessKey secret(秘钥)、bucket name(bucket域名)。  通过这几

    2024年01月25日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包