IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> ElementUI的upload上传文件到OSS,使用授权URL,无需额外配置RAM账户 -> 正文阅读

[JavaScript知识库]ElementUI的upload上传文件到OSS,使用授权URL,无需额外配置RAM账户

ElementUI的upload上传文件到OSS,使用授权URL,无需额外配置RAM账户

ElementUI的upload上传文件到OSS,使用授权URL,无需额外配置RAM账户

最近在做一个上传到oss的部分,oss文档中使用sts授权的方式阅读量太大,不想看。
授权URL的方式看上去更加简单,于是开始研究。但是这一部分网上相关案例是真的少,经过好久的调试,现在将代码贴出来

1.服务器端

//oss的配置,这个不介意的话直接用主账号的也没关系,权限做的好点的就自己创建一个ram用户
let ossConfig={
	"region": "oss-cn-xxxx",
    "accessKeyId": "LTxxxxxxxxxxxxxxxxxxxx",
    "accessKeySecret": "fcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "bucket": "xxx"
}
//获取授权URL,源文档 https://help.aliyun.com/document_detail/32077.html#title-sdv-594-iub
const client = new OSS(ossConfig);
let filename='xxxxx.zip';
const url = client.signatureUrl(filename, {
  expires: 3600,
  method: 'PUT', 
  'Content-Type': 'application/octet-stream',//这里与原文档不同,源文档是'text/plain; charset=UTF-8'类型,这里很重要
});

console.log(url)
//这个URL回传到前端

2.前端

el-upload组件中

el-upload#(
   action='',//这里很重要,这里必须留空,且配合下方的http-request才能覆盖默认上传方法
   :http-request='upload',//upload是自定义的上传方法
   :auto-upload='true')//这个我个人喜欢自动上传,必须换点击,这里不重要

自定义的upload方法

upload: function (param) {
      let that = this
      that
        .$axios({
          method: 'put',
          url: that.uploadUrl,//后端传过来的授权url
          data: param.file,//这里很重要,必须直接使用param.file,
          //很多教程使用的是formData嵌套了一遍,那么在上传的时候,
          //content-type就会变成multipart/form-data; boundary=----WebKitFormBoundaryaskldjlkasjdlk这样子的,
          //关键在于这个自动附上的boundary,这个部分我们在申请授权url的时候并没有带上,也带不上,所以会导致申请的url的签名与实际上传时候计算的签名不一致,然后被oss403掉。
          //所以这里一定要这样子
          withCredentials: false,//跨域必须
          headers: {
            'Content-Type': 'application/octet-stream',//这里上面写了,很重要
          }
        })
        .then(function (response) {
          //成功
        })
        .catch(function (error) {
          //报错
        })
    },

总结

最重要的就是申请URL和实际上传时候的header必须一模一样,而使用formData会自动附上boundary导致签名校验失败

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-30 12:28:21  更:2021-10-30 12:29:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 8:45:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码