当前位置:   article > 正文

vue前端直接使用element-ui的upload组件上传到阿里云OSS存储_elemtui上传文件到阿里oss

elemtui上传文件到阿里oss

因为公司的服务器比较拉吧,所以老大决定将数据文件等上传到阿里云服务器,通过ali-oss方式,这样的话读取文件也比较快 

(能看到这说明什么安装element-ui都会了,我就不详细介绍了,直接跳过) 

在执行下面操作之前,你要确定你的阿里云能看到上边这个页面 

 这里主要是配置读写,只有设置成公共读写,才可以前端直接上传,不需要跟后端要什么token了

一、安装 npm i  --save ali-oss

(1).在vue-clic中新建tools.js文件,(此文件主要是封装方法)

  1. let OSS = require('ali-oss')
  2. let client = new OSS({
  3. region: 'oss-cn-beijing', //创建的时候,bucket所在的区域,华北2->oss-cn-beijing ;其他的可以去百度
  4. accessKeyId: 'wefwefwfwfwfwfwdwd2d32dw',// 阿里云控制台创建的AccessKey
  5. accessKeySecret: '123dwdw1e12e2e2d2fwefw', //阿里云控制台创建的AccessSecret
  6. bucket: 'xxxxx' //创建的bucket的名称
  7. })
  8. export const put = async (ObjName, fileUrl) => {
  9. try {
  10. let result = await client.put(`${ObjName}`, fileUrl)
  11. // ObjName为文件名字,可以只写名字,就直接储存在 bucket 的根路径,如需放在文件夹下面直接在文件名前面加上文件夹名称
  12. return result
  13. } catch (e) {
  14. console.log(e)
  15. }
  16. }
  17. // 上传成功之后,转换真实的地址
  18. export const signatureUrl= async (ObjName) => {
  19. try {
  20. let result = await client.signatureUrl(`${ObjName}`)
  21. return result
  22. } catch (e) {
  23. console.log(e)
  24. }
  25. }
  26. export const getFileNameUUID = () => {
  27. function rx() {
  28. return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
  29. }
  30. return `${+new Date()}_${rx()}${rx()}`
  31. }

(2)在.vue中写入一下代码,有注释,细心的话可以看懂(我只是演示,所以放到了app.vue文件中了)

  1. <template>
  2. <div id="app">
  3. <el-upload
  4. class="upload-demo"
  5. ref="upload"
  6. action="#"
  7. :on-preview="handlePreview"
  8. :on-remove="handleRemove"
  9. :beforeUpload="beforeUpload"
  10. :file-list="fileList"
  11. :http-request="handleUpload"
  12. :auto-upload="false">
  13. <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
  14. <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
  15. <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
  16. </el-upload>
  17. </div>
  18. </template>
  19. <script>
  20. import { put, signatureUrl, getFileNameUUID } from './tools'
  21. export default {
  22. name: 'App',
  23. data(){
  24. return {
  25. fileList:[]
  26. }
  27. },
  28. methods: {
  29. getFileName(name){
  30. return name.substring(name.lastIndexOf("."));//.txt
  31. },
  32. beforeUpload(file) {
  33. // 限制上传类型
  34. const fileExtensions = this.getFileName(file.name) === '.doc' || this.getFileName(file.name) === '.docx' || this.getFileName(file.name) ==='.pdf'
  35. //限制的上限为20M
  36. const max20M = file.size / 1024 / 1024 < 20;
  37. if (!fileExtensions) {
  38. this.$message.error('上传文件类型只能是 .doc, .docx, .pdf 格式!');
  39. }
  40. if (!max20M) {
  41. this.$message.error('上传文件大小不能超过 20MB!');
  42. }
  43. return fileExtensions && max20M;
  44. },
  45. handleUpload(option) {
  46. // 获取文件的后缀名
  47. // let objName = getFileNameUUID()
  48. var obj = option.file.name
  49. var index = obj.lastIndexOf(".");
  50. obj = obj.substring(index,obj.length);
  51. // 生成的文件名,保留文件后缀名,进行拼接
  52. let objName = getFileNameUUID() + this.getFileName(option.file.name)
  53. // 调用 ali-oss 中的方法,flieName是存放的文件夹名称,可自己定义
  54. put(`flieName/${objName}`, option.file).then(res => {
  55. console.log(res,'res')
  56. // 上传成功之后,转换真实的地址
  57. signatureUrl(`flieName/${objName}`).then(res => {
  58. console.log(res)
  59. })
  60. })
  61. },
  62. submitUpload() {
  63. this.$refs.upload.submit();
  64. },
  65. handleRemove(file, fileList) {
  66. console.log(file, fileList);
  67. },
  68. handlePreview(file) {
  69. console.log(file);
  70. }
  71. }
  72. }
  73. </script>
  74. <style>
  75. #app {
  76. font-family: Avenir, Helvetica, Arial, sans-serif;
  77. -webkit-font-smoothing: antialiased;
  78. -moz-osx-font-smoothing: grayscale;
  79. text-align: center;
  80. color: #2c3e50;
  81. margin-top: 60px;
  82. }
  83. </style>

(3)运行一下试试,咦,是不是报跨域问题了?没有恭喜你成功了,出现的小伙伴也不要着急,请看下图

 按上图配置,八九不离十,直接成功!

二、跑起来之后,我老大跟我提了个需求就是,把阿里云里面现有的文件url整体的提取出来,于是乎,我便开始疯狂查阅文档,最终找到了这个基于nodejs的宝藏脚本,代码如下:

  1. const OSS = require('ali-oss');
  2. //这里的配置和上传的配置保持一致,毕竟只是为了查询当前阿里云已存的所有文件url
  3. const client = new OSS({
  4. accessKeyId: 'wefhwuifhweifhwefhwiof',
  5. accessKeySecret: 'wefhwfwefwfwefewgretg',
  6. bucket: 'wefwfw',
  7. region: 'oss-cn-beijing',
  8. });
  9. let urls = []
  10. async function list () {
  11. // 不带任何参数,默认最多返回100个文件。
  12. const result = await client.list();
  13. // console.log(result.objects.url);
  14. for(let i = 0;i < result.objects.length ;i++){
  15. let url = result.objects[i].url
  16. urls.push(url)
  17. }
  18. console.log(urls)
  19. }
  20. list();

OK了,本篇文章的有价值信息就这些,不为别的,只为了记录自己的经历,不断学习,不断进步!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/703008
推荐阅读
相关标签
  

闽ICP备14008679号