axios上传文件以及遇到的问题

axios上传文件以及遇到的问题axios上传文件以及遇到的问题1,这里上传文件使用的是elementUI的上传,也用原生的input上传写了,但是没有时间做多文件上传,下面会把代码贴出。2,这里上传文件我是先获取OSS权限和上传路径,然后再上传。但是权限获取成功后,上传到阿里云服务器时,OPTION请求报403。原因是项目中axios设置了拦截器,添加了config配置,但是在axios发送OPTION测试接口是否有权限访…

大家好,又见面了,我是你们的朋友全栈君。

axios上传文件以及遇到的问题

1,这里上传文件使用的是elementUI的上传,也用原生的input上传写了,但是没有时间做多文件上传,下面会把代码贴出。
2,这里上传文件我是先获取OSS权限和上传路径,然后再上传。但是权限获取成功后,上传到阿里云服务器时,OPTION请求报403。原因是项目中axios设置了拦截器,添加了config配置,但是在axios发送OPTION测试接口是否有权限访问的时候,config的配置必须的干净的,所以这里我的处理方式的单独create一个axios请求。

let instance = axios.create();
instance.post(obj.host, formData).then(res => { 
   
	//oss是请求的文件上传路径接口返回的,formData是上传的文件
    if (res) { 
   
      //拼接上传后的文件路径,
      const fileUrl = obj.host + '/' + obj.imageDir + "/" + imageName + '/' + file.name;
      //将拼接成功的路径保存
      let newUpLoadArr = this.upLoadArray;
      newUpLoadArr.push(fileUrl);
      this.upLoadArray = newUpLoadArr;
    }
})

最后是完整的axios上传文件的代码,时间过于仓促就没有封装组件。

<el-upload
      class="upload-demo"
      multiple
      ref="upload"
      action="https://jsonplaceholder.typicode.com/posts/"
      :on-remove="handleRemove"
      :file-list="fileList"
      :auto-upload="false"
      :on-change="handleChange"
      :http-request="httpRequest"
>
     <el-button size="small" type="primary">点击上传</el-button>
</el-upload>
//原生input输入框文件上传
//<input type="file" @change="handleChange">

//文件列表移除文件时的钩子
handleRemove(file) { 
   
  this.upLoadArray = this.upLoadArray.filter(item => !item.includes(file.name));
},
//文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
handleChange(file, fileList){ 
   
 //上传文件大小限制,Math.pow(2,20)就是1024*1024,需要显示多少兆就把10改成多少兆
 if (file.size > (10 * Math.pow(2, 20))) { 
   
   this.fileList = [];
   this.$message({ 
   
     type: 'warning',
     message: '文件大小超过10M,请重新选择文件!'
   });
   return;
 }
 this.fileList = fileList;
 this.getOSS(file)
},
//覆盖请求
httpRequest(){ 
   },
//获取OSS权限
getOSS(file){ 
   
  get('/oss').then(res => { 
   
    if (res) { 
   
      this.uploadToOss(res, file);
    }
  })
},
//上传服务器
uploadToOss (obj, file) { 
   
  let imageHash = "" + Math.random()
  let imageName = imageHash.substring(2, imageHash.length)
  let formData = new FormData();
  formData.append('key', obj.imageDir + '/' + imageName + '/' + file.name);
  formData.append('policy', obj.policy);
  formData.append('OSSAccessKeyId', obj.accessId);
  formData.append('success_action_status', 200);
  formData.append('signature', obj.signature);
  formData.append("file", file);
  let instance = axios.create();
  instance.post(obj.host, formData).then(res => { 
   
    if (res) { 
   
      const fileUrl = obj.host + '/' + obj.imageDir + "/" + imageName + '/' + file.name;
      let newUpLoadArr = this.upLoadArray;
      newUpLoadArr.push(fileUrl);
      this.upLoadArray = newUpLoadArr;
    }
  }).catch(err => { 
   
    console.log(err)
  });
}

最后附上成品,至于上传成功后的样式,可根据上传成功拼接的文件路径自行设计和调整。
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149820.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 请描述django模板中标签的作用?_抽奖券模板

    请描述django模板中标签的作用?_抽奖券模板常用的模板标签if标签if标签相当于Python中的if语句,有elif和else相对应,但是所有的标签都需要用标签符号({%%})进行包裹。if标签中可以使用==、!=、<、<=、&

    2022年7月29日
    6
  • 如何理解先验概率和后验概率

    如何理解先验概率和后验概率如何理解先验概率和后验概率前言先验概率的分类先验概率与后验概率的区别理解前言近代西方传统中 认为先验指无需经验或先于经验获得的知识 它通常与后验知识相比较 后验意思是指 在经验之后 需要经验 这一区分来自于中世纪逻辑所区分的两种论证 从原因到结果的论证称为 先验的 而从结果到原因的论证称为 后验的 先验概率是指根据以往经验和分析得到的概率 如全概率公式 它往往作为 由因求果 问题中的 因 出现 后验概率是指在得到 结果 的信息后重新修正的概率 是 执果寻因 问题中的 因 后验概率是基于新的

    2025年8月15日
    2
  • srvctl start_局部视图的配置规定是

    srvctl start_局部视图的配置规定是SRVCTL概述SRVCTL是ORACLERAC集群配置管理的工具,可以管理Database、Instance、ASM、Service、Listener和NodeApplication,NodeApplication包括GSD,ONS,VIP。srvctl的命令格式为srvctl<command><target>[options]srvctlUs…

    2025年10月31日
    3
  • 【Maven学习】Maven打包生成普通jar包、可运行jar包、包含所有依赖的jar包

    【Maven学习】Maven打包生成普通jar包、可运行jar包、包含所有依赖的jar包使用maven构建工具可以将工程打包生成普通的jar包、可运行的jar包,也可以将所有依赖一起打包生成jar;一、普通的jar包普通的jar包只包含工程源码编译出的class文件以及资源文件,而不包含任何依赖;同时还包括pom文件,说明该包的依赖信息;在工程pom文件下这样写,可生成普通的jar包:jar或者,不写,因为packaging默认打包类型为

    2022年5月30日
    37
  • python绘制爱心表白_六行python代码的爱心曲线

    python绘制爱心表白_六行python代码的爱心曲线#-*-coding:utf-8-*-importturtleimporttime#画爱心的顶部defLittleHeart():foriinrange(200):turtle.right(1)turtle.forward(2)#输入表白的语句,默认ILoveyoulove=input(‘请输入表白语句,默认为输入为”ILoveyou”:’)#输入署名或者赠谁,没有不执行me=input(‘请输.

    2025年9月30日
    3
  • py 的 第 36 天「建议收藏」

    py 的 第 36 天「建议收藏」py 的 第 36 天

    2022年4月20日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号