阿里 OSS图片上传 —— 原生JS中使用

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 这是最近开发遇到的一个坑,"可爱"的前辈们留下来的宝贵财产,很不幸的是,一行注释都没给,所以开心(被迫)的去研究了一下文档.然而发现官方文档又臭又长,于是自己捣鼓了下,总算是搞出来了.

前言



这是最近开发遇到的一个坑,"可爱"的前辈们留下来的宝贵财产,很不幸的是,一行注释都没给,所以开心(被迫)的去研究了一下文档.


然而发现官方文档又臭又长,于是自己捣鼓了下,总算是搞出来了.


这里给出两个方案:


原生JS(包括jQuery)里如何使用OSS图片上传

二是Vue项目如何使用OSS图片上传(晚点写)

10.png

OSS 简介及应用场景介绍



1. 全称: Object Storage Service,简称 OSS,是阿里云提供的海量、安全、低成本、高可靠的云存储服务。


2. 它具有与平台无关的RESTful API接口,能够提供99.999999999%的服务持久性。(牛皮就完事了)


使用场景:


图片上传

视频上传


原生JS使用OSS图片上传



1. 方法的定义

   // 方法的定义
   window.multipartUpload = function multipartUpload(storeAs, file, filename, filetype) {
      var client = new OSS.Wrapper({
        accessKeyId: 'youID',    // 
        accessKeySecret: 'youSecret',     // accessKeyId和accessKeySecret是OSS的访问密钥
        endpoint: 'http://xxxxx',            // OSS对应的区域地址
        bucket: 'osshanyatemp'                // 容器
      });
      // 这里可以做一些控制 大小,格式等
      if (file.size/1024/1024 < 2 || file.size/1024/1024 > 5) {
        layer.msg("照片大小只能在2~5M之间");
        return;
      }
      console.log(file);
      client.multipartUpload(storeAs, file).then(function (result) {
        var reviewUrl = result.url ? result.url : result.res.requestUrls[0].split('?')[0];
        // 这里可以拿到阿里云返回的临时地址 需要传给后台
        console.log(reviewUrl)   
      }).catch(function (err) {
        console.log(err);
      });
    }

2. 方法的调用

// 监听图片上传的元素change事件  
document.getElementById('uploadImg').addEventListener('change', function (e) {
    var upload_num = document.getElementById('uploadImg').files.length;
    var ff = document.getElementById('uploadImg').files;
    // 做一些相关判断
    if (ff.length > 8) {
      layer.msg("最多只能上传8张");
      return;
    }
    // 由于是多图上传,所以要用到循环
    for (var i = 0; i < upload_num; i++) {
      var filename = ff[i].name;
      var filetype = ff[i].type;
      // 生成10位随机数 原因是阿里云的机制问题
      // 当我上传完某张图片之后,不可上传同名的图片
      // 所以加了个随机数,每张图的名字都不一样      
      let randomNum = getRandom(10);
      let regStr = palindrome(ff[i].name)
      filename = randomNum + regStr;
      // 图片重命名
      Object.defineProperty(ff[i], 'name', {
        value: filename,
        writable: true,
        configurable: true,
        enumerable: true,
      });
      // 限制格式 png jpeg
      if (
        filename.indexOf("jpeg") != -1 || filename.indexOf('JPEG') != -1
        ) {
        var storeAs = "pic/" + new Date().getTime() + '_' + i + file.name;
        // 方法调用
        window.multipartUpload(storeAs, ff[i], filename, filetype);
      } else {
        alert('上传的格式不正确');
        return;
      }
    }
  });


相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
17天前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
2月前
|
JavaScript
原生js实现复选框(全选/全不选/反选)效果【含完整代码】
原生js实现复选框(全选/全不选/反选)效果【含完整代码】
58 1
|
17天前
|
JavaScript 算法
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
|
1月前
|
存储 安全 对象存储
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
本文详细介绍了怎样帮助新手小白从注册,购买阿里云OSS,到一步一步配置OSS做为图床,和PicGo、Typora软件连接,配置好关联之后,在使用Typora写文章时,如果需要插入图片,只需要将图片复制粘贴到Typora的编辑区域,就会自动通过PicGo上传到指定图床,自动复制外网能访问的URL并展示,简直不要太方便,极大的解决了编辑文章时复制处理图片链接的痛点。
174 2
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
|
3月前
|
前端开发 JavaScript 索引
|
3天前
|
JavaScript 前端开发 UED
深入解析JavaScript原生操作DOM技术
【4月更文挑战第22天】本文深入探讨JavaScript原生DOM操作技术,包括使用`getElement*`方法和CSS选择器获取元素,借助`createElement`与`appendChild`动态创建及插入元素,修改元素内容、属性和样式,以及删除元素。通过掌握这些技术,开发者能实现页面动态交互,但应注意避免过度操作DOM以优化性能和用户体验。
|
17天前
|
JavaScript
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
|
3月前
|
JavaScript 前端开发
jsjs原生 JavaScript轮播图 渐变淡入淡出
jsjs原生 JavaScript轮播图 渐变淡入淡出
|
3月前
|
前端开发 JavaScript 安全
JavaScript 中的宿主对象和原生对象:开发者必知的基础知识(下)
JavaScript 中的宿主对象和原生对象:开发者必知的基础知识(下)
JavaScript 中的宿主对象和原生对象:开发者必知的基础知识(下)
|
3月前
|
XML 存储 JavaScript
JavaScript 中的宿主对象和原生对象:开发者必知的基础知识(上)
JavaScript 中的宿主对象和原生对象:开发者必知的基础知识(上)
JavaScript 中的宿主对象和原生对象:开发者必知的基础知识(上)