上传图片到阿里云 OSS

1.在 index.html 中引入 OSS。

<script src="http://gosspublic.alicdn.com/aliyun-oss-sdk-4.4.4.min.js" />

2.配置参数说明

1)AWconfig为阿里云图片地址配置,基本结构如下,注意至少要包含一个键名为'aliyunConfig'的对象:

{
  "aliyunConfig": {
    "endpoint": "https://example1.aliyuncs.com/",
    "bucket": "example2-image",
    "url":"https://example3.oss-cn-shenzhen.aliyuncs.com"
  }
}

2) token为请求阿里云服务的唯一token,由后端接口返回,有效期为60分钟,注意此参数必须为一个包含三个指定键名的对象,如下:

{
  accessKeyId: 'accessKeyIdFromAPI',
  accessKeySecret: 'accessKeySecretFromAPI',
  securityToken: 'securityTokenFromAPI',
}

3. 在要使用阿里云上传服务的页面中加载时即进行配置,将上述参数传给config方法,此方法返回闭包函数,因此需要一个变量接收。

this.someFn = new Aliyun().config({
  AWconfig: AWconfig,  
  token: token,  
})

在上传图片的组件中调用someFn方法,如下:

this.someFn(callback, file) // file为上传的事件的file,即event.file

callback为此方法执行后的回调函数,此函数接收两个参数如下:

callback(url, aliyunResult) {
  // url为上传后的已保存在阿里云服务器的图片地址
  // aliyunResult为阿里云服务器返回的response数据,可进行其他操作
}

4.图片如何上传阿里云 OSS,同时也上传到接口

<div class="upload">
  <el-upload
    ref="upload"
    action="placeholder"
    :accept="config.accept"
    :multiple="config.multiple"
    :http-request="handleHttpRequest"
    :show-file-list="false"
    list-type="picture"
    v-for="(item, index) in options"
    :key="index"
  >
    <div class="upload-btn">
      <el-button
      type="primary"
      size="small"
      icon="el-icon-upload"
      @click="handleClickType(item, $event)"
      >
      {{ `${ item.label} (${item.number})` }}
      </el-button>
    </div>
  </el-upload>
</div>

upload 组件中,http-request 函数是覆盖默认的上传行为,可以自定义上传的实现。

handleHttpRequest (param) {
  const $that = this
  this.beforeUploadPicture++
  function callback (url, aliyunResult) {
    $that.calculatorSuccessPicture++
    $that.applyFiles.push({
      'fileId': aliyunResult.name, // 必填
      'fileUrl': url,
      'fileName': param.file.name,
    })
  }
  this.someFn(callback, param.file)  // 上传图片至阿里云 OSS
},

因为上传阿里云数据返回可能会存在异步, 所以用两个变量去控制。

watch: {
  'calculatorSuccessPicture' (newVal) {
    if (newVal === this.beforeUploadPicture && newVal !== 0) {
      this.toUpload() // 将阿里云 OSS 上的信息上传到接口
    }
  },
},

调用上传接口:

toUpload (item) {
  transaction.getUpLoadPickUpLetter({
    fileList: this.applyFiles,
    bizType: this.clickType,
    ...this.uploadParam,
  }).then(res => {
    this.beforeUploadPicture = 0
    this.calculatorSuccessPicture = 0
    this.applyFiles = []
    this.$message.success('上传成功')
    this.getFileList({ ...this.uploadParam, bizTypeArray: [] })
  })
},

5. 异常说明

1) token过期,执行someFn(callback, file)时会返回errorCode == 'aliyun-000',捕捉此异常后需要重新向后端请求获取token

2) 参数异常,config()方法中会先执行校验参数,如果参数不符合规定,将会throw new Error(),可在程序中捕捉此异常

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3是一种流行的JavaScript框架,用于构建用户界面。它具有响应式数据绑定、组件化开发和虚拟DOM等特性,使得开发者可以更高效地构建交互式的Web应用程序。 要在Vue3中实现上传图片阿里云OSS,你可以按照以下步骤进行操作: 1. 安装依赖:首先,你需要安装阿里云OSS的JavaScript SDK。可以使用npm或yarn命令来安装,例如: ``` npm install ali-oss ``` 2. 配置OSS客户端:在Vue3的代码中,你需要创建一个OSS客户端实例,并配置相关参数,如AccessKeyId、AccessKeySecret、Endpoint等。这些参数可以在阿里云OSS控制台中获取。 3. 创建上传组件:在Vue3中,你可以创建一个上传组件,用于选择图片文件并触发上传操作。可以使用`<input type="file">`元素来实现文件选择功能,并监听其`change`事件。 4. 上传图片:在上传组件中,你可以编写上传图片的逻辑。当用户选择了图片文件后,你可以通过OSS客户端调用`put`方法来上传图片文件到阿里云OSS。 下面是一个简单的示例代码,演示了如何在Vue3中上传图片阿里云OSS: ```javascript <template> <div> <input type="file" @change="handleFileChange"> </div> </template> <script> import OSS from 'ali-oss'; export default { methods: { handleFileChange(event) { const file = event.target.files[0]; const client = new OSS({ accessKeyId: 'your-access-key-id', accessKeySecret: 'your-access-key-secret', bucket: 'your-bucket-name', region: 'your-oss-region', // 其他配置参数... }); // 生成唯一的文件名 const fileName = Date.now() + '-' + file.name; // 调用OSS客户端的put方法上传文件 client.put(fileName, file).then(response => { console.log('上传成功', response); // 在这里可以处理上传成功后的逻辑 }).catch(error => { console.error('上传失败', error); // 在这里可以处理上传失败后的逻辑 }); } } } </script> ``` 请注意,上述代码中的`your-access-key-id`、`your-access-key-secret`、`your-bucket-name`和`your-oss-region`需要替换为你自己的阿里云OSS相关信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值