ios 上传图片到阿里云的oss_vue element-ui直传视频到阿里云oss

本文介绍了如何在紧急情况下,前端直接上传视频到阿里云OSS,避免与后端交互,提高开发效率。通过封装阿里云OSS的上传JS工具类,实现了文件上传功能,并在Vue项目中应用。文章详细展示了配置、代码实现及注意事项,包括创建随机字符串、OSS客户端、文件上传等关键步骤,帮助开发者快速解决视频上传问题。
摘要由CSDN通过智能技术生成

1.需求

最近我们公司在做一个官网涉及到图片视频上传的问题,时间比较紧急(实际后端想偷懒),就让我直传视频到阿里云的oss上。我一听,也是一脸懵,人在家中坐,锅从天上来。话不多说,我直冲度娘,网上的案例真的是非常的多,眼花缭乱,我也试了几个发现都是有问题的,又联系不到博主,最终我还是放弃了,干脆自己搞一个吧,经过三天三夜的奋战(其实是一晚上)!所以分享出来给各位小伙伴们,希望早日脱坑!

先上效果图

030834e7bf049d4f3bc201bbc120785d.png

2.阿里oss的安装

npm install ali-oss --save

3.封装oss通用上传js工具类

 "use strict";import { dateFormat } from './utils.js'var OSS = require("ali-oss");let url='';export default {  /**   * 创建随机字符串   * @param num   * @returns {string}   */  randomString(num) {    const chars = [      "0",      "1",      "2",      "3",      "4",      "5",      "6",      "7",      "8",      "9",      "a",      "b",      "c",      "d",      "e",      "f",      "g",      "h",      "i",      "j",      "k",      "l",      "m",      "n",      "o",      "p",      "q",      "r",      "s",      "t",      "u",      "v",      "w",      "x",      "y",      "z"    ];    let res = "";    for (let i = 0; i < num; i++) {      var id = Math.ceil(Math.random() * 35);      res += chars[id];    }    return res;  },  /**   * 创建oss客户端对象   * @returns {*}   */  createOssClient() {    return new Promise((resolve, reject) => {      const client = new OSS({        region: "XXXXX", // 请设置成你的        accessKeyId: "XXXXX", // 请设置成你的        accessKeySecret: "XXXXX", // 请设置成你的        bucket: "XXXXX", // 请设置成你的        secure: true // 上传链接返回支持https      });      resolve(client);    });  },  /**   * 文件上传   * @param option 参考csdn: https://blog.csdn.net/qq_27626333/article/details/81463139   */  ossUploadFile(option) {    const file = option.file;    const self = this;// var url = '';    return new Promise((resolve, reject) => {      const date = dateFormat(new Date(), "yyyyMMdd"); // 当前时间      const dateTime = dateFormat(new Date(), "yyyyMMddhhmmss"); // 当前时间      const randomStr = self.randomString(4); //  4位随机字符串      const extensionName = file.name.substr(file.name.indexOf(".")); // 文件扩展名      const fileName =        "video/" + date + "/" + dateTime + "_" + randomStr + extensionName; // 文件名字(相对于根目录的路径 + 文件名)      // 执行上传      self.createOssClient().then(client => {        // 异步上传,返回数据        resolve({          fileName: file.name,          fileUrl: fileName        });        // 上传处理        // 分片上传文件        client          .multipartUpload(fileName, file, {            progress: function(p) {              const e = {};              e.percent = Math.floor(p * 100);              // console.log('Progress: ' + p)              option.onProgress(e);            }          })          .then(            val => {  window.url = val              console.info('woc',url);              if (val.res.statusCode === 200) {                option.onSuccess(val);                return val;              } else {                option.onError("上传失败");              }            },            err => {              option.onError("上传失败");              reject(err);            }          );      });    });  }};

4.在src下的util文件创建utils.js工具类

 /** * 时间日期格式化 * @param format * @returns {*} */export const dateFormat = function(dateObj, format) {  const date = {    "M+": dateObj.getMonth() + 1,    "d+": dateObj.getDate(),    "h+": dateObj.getHours(),    "m+": dateObj.getMinutes(),    "s+": dateObj.getSeconds(),    "q+": Math.floor((dateObj.getMonth() + 3) / 3),    "S+": dateObj.getMilliseconds()  };  if (/(y+)/i.test(format)) {    format = format.replace(      RegExp.$1,      (dateObj.getFullYear() + "").substr(4 - RegExp.$1.length)    );  }  for (const k in date) {    if (new RegExp("(" + k + ")").test(format)) {      format = format.replace(        RegExp.$1,        RegExp.$1.length === 1          ? date[k]          : ("00" + date[k]).substr(("" + date[k]).length)      );    }  }  return format;};

5.vue页面中的使用

上传视频文件,且不超过500mb

6.js中的代码

 

7.css代码

8.总结

我在这里讲一下需要注意的几点:

1.这个我没有贴出阿里云的一些配置,自己可以问问度娘,网上有很多资料,注意跨域的配置就行。

2.这样做的优点就是不用和后端交互,图片直传到你阿里云的oss然后返回链接,不需要后端的传值,省去了很多和后端人员联调的时间,大大提高了开发的效率。

代码我已经都贴出来了,样式的话可以自己改,这个是可以根据自己的需求来更改的,如果还有什么问题的话,欢迎留言评论!

a6f8c3385a98842e5927cf1d0df4bfd0.png

图片来源于网络

Element-UI 是一个基于 Vue.js 的组件库,提供了丰富的 UI 组件和交互功能。要实现在 Element-UI上传图片阿里云 OSS,可以按照以下步骤进行: 1. 安装依赖:首先,需要安装 `ali-oss` 和 `element-ui` 的相关依赖。可以使用 npm 或者 yarn 进行安装。 2. 配置阿里云 OSS:在阿里云 OSS 控制台创建一个 Bucket,并获取 AccessKeyId、AccessKeySecret、Bucket 名称和 Endpoint。 3. 创建上传组件:在 Vue 组件中,使用 Element-UI 的 `el-upload` 组件来实现图片上传功能。可以设置 `action` 属性为阿里云 OSS 的上传地址,`before-upload` 属性来处理上传前的逻辑。 4. 在上传前进行签名:在 `before-upload` 方法中,需要通过阿里云 OSS 的 SDK 进行签名操作,生成上传所需的参数。可以使用 `ali-oss` 库提供的 `put` 方法来进行签名。 5. 上传图片:在签名成功后,调用 `put` 方法将图片上传到阿里云 OSS。可以设置 `on-success` 属性来处理上传成功后的逻辑。 下面是一个简单的示例代码: ```vue <template> <el-upload action="https://your-bucket-name.oss-cn-hangzhou.aliyuncs.com" :before-upload="handleBeforeUpload" :on-success="handleUploadSuccess" > <el-button>点击上传</el-button> </el-upload> </template> <script> import OSS from 'ali-oss'; export default { methods: { async handleBeforeUpload(file) { const client = new OSS({ region: 'your-region', accessKeyId: 'your-access-key-id', accessKeySecret: 'your-access-key-secret', bucket: 'your-bucket-name', }); try { const result = await client.put(file.name, file); // 在这里可以处理上传成功后的逻辑 } catch (error) { // 处理上传失败的逻辑 } // 返回 false 可以阻止上传 return false; }, handleUploadSuccess(response) { // 处理上传成功后的逻辑 }, }, }; </script> ``` 请注意,上述代码中的 `your-region`、`your-access-key-id`、`your-access-key-secret` 和 `your-bucket-name` 需要替换为你自己的阿里云 OSS 相关信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值