当前位置:   article > 正文

关于vue使用阿里云OSS分片上传(含进度条)_vue2java分片上传视频oss

vue2java分片上传视频oss

需要上传文件到阿里云OSS考虑到文件较大采用分片上传(demo)

1. 使用 npm 安装SDK开发包

npm install ali-oss

2.在 vue 中直接使用

代码段可直接使用 具体功能查看 官方文档

  1. <template>
  2. <div>
  3. <el-upload
  4. ref="upload"
  5. drag
  6. action
  7. :auto-upload="false"
  8. multiple
  9. :on-change="uploadFile"
  10. >
  11. <i class="el-icon-upload"></i>
  12. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  13. </el-upload>
  14. <el-progress
  15. style="margin: 20px 0"
  16. :text-inside="true"
  17. :stroke-width="26"
  18. :percentage="progress"
  19. ></el-progress>
  20. </div>
  21. </template>
  22. data() {
  23. return {
  24. progress: 0,
  25. uploadId: "",
  26. file_name: "",
  27. };
  28. },
  29. methods: {
  30. async uploadFile(files) {
  31. let that = this;
  32. let file = files.raw;
  33. let OSS = require("ali-oss");
  34. // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  35. let res = await GetSts();//向后端发请求获取信息
  36. let client = new OSS({
  37. bucket: res.data.body.bucket_name,
  38. region: res.data.body.region,
  39. accessKeyId: res.data.body.AccessKeyId,
  40. accessKeySecret: res.data.body.AccessKeySecret,
  41. stsToken: res.data.body.SecurityToken,
  42. expiration: res.data.body.Expiration,
  43. });
  44. const options = {
  45. // 获取分片上传进度、断点和返回值。
  46. progress: (p, cpt, res) => {
  47. that.uploadId = cpt.uploadId;//取消时需要的参数
  48. that.progress = Number((p * 100).toFixed(0));//进度条
  49. },
  50. // 设置并发上传的分片数量。
  51. parallel: 9999,
  52. // 设置分片大小。默认值为1 MB,最小值为100 KB。
  53. partSize: 1024 * 1024,
  54. // headers,
  55. // 自定义元数据,通过HeadObject接口可以获取Object的元数据。
  56. meta: { year: 2020, people: "test" },
  57. callback: {
  58. // 设置回调请求的服务器地址,且要求必须为公网地址。
  59. url: res.data.body.callback.url,
  60. // 设置发起回调时请求body的值。
  61. body: res.data.body.callback.body,
  62. // 设置发起回调请求的Content-Type。
  63. contentType: res.data.body.callback.contentType,
  64. },
  65. };
  66. //开始分片上传。
  67. async function multipartUpload() {
  68. try {
  69. //object-name可以自定义为文件名(例如file.txt)或目录(例如abc/test/file.txt)的形式,实现将文件上传至当前Bucket或Bucket下的指定目录。
  70. let result = await client.multipartUpload(
  71. res.data.body.folder + "/" + file.name,
  72. file,
  73. {
  74. ...options,
  75. }
  76. );
  77. console.log(result);
  78. let head = await client.head(file.name);
  79. console.log(head);
  80. } catch (e) {
  81. // 捕获超时异常。
  82. console.log(e);
  83. }
  84. }
  85. multipartUpload(); //调用函数
  86. },
  87. },

重要 通常在文件大于100 MB的情况下,建议采用分片上传的方法,通过断点续传和重试,提高上传成功率。如果在文件小于100 MB的情况下使用分片上传,且partSize设置不合理的情况下,可能会出现无法完整显示上传进度的情况。对于小于100 MB的文件,建议使用简单上传的方式。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号