利用element-ul 配合腾讯云自定义上传图片

这篇博客介绍了如何在项目中集成腾讯云COS(对象存储服务)的JS SDK,包括安装、导入、实例化和使用SDK进行文件上传的操作步骤。同时,展示了Vue.js中使用自定义上传实现图片上传的完整代码示例,包括限制上传文件大小和类型的检查。

  1:安装插件   导入腾讯云

     npm i cos-js-sdk-v5   

     yarn add  cos-js-sdk-v5
//  选择其中一种.如果混用就会导致项目无法跑起来.
//  解决方法.用其中一种再下载一次.然后使用对应的方法打开.项目

2.导入

import Cos from 'cos-js-sdk-v5'

3.实例化

  let cos = new Cos({
    SecretId: 'xxx', // 身份识别 ID
    SecretKey: 'xxx', // 身份密钥
});

 1.打开自己的云.在输入框中搜索密钥.然后把对应的添加

 

 

4.使用

  4:
  cos.putObject({
    Bucket: '这里时你自定义的账号名拼接数字', /* 存储桶: */
    Region: 'ap-guangzhou',     /* 存储桶所在地域,必须字段 */
    Key: uid+'',              /* 必须是字符串 */
    StorageClass: 'STANDARD',  // 固定值
    Body: 文件对象, // 上传文件对象
    onProgress: (progressData)=> {
        上传进度
        console.log(JSON.stringify(progressData));
    }
}, (err, data)=> {
  // 上传成功或者失败的回调
    console.log(err || data);
}); -->

在云中搜索自己的存储桶..在对象存储的存储列表中.

 完整代码

<template>
  <div>
    <!--
      el-element图片上传
      action:上传地址 必写
      name:上传的字段
      befor-updata:上传前
      on-success;上传成功时
      http-request:使用自定义上传  他会让action on-success无效.
     -->
    <!--  腾讯云上传使用
  1:安装插件
     cos-js-sdk-v5   yarn add  cos-js-sdk-v5
  2:导入
    import Cos from 'cos-js-sdk-v5'
  3:实例化
  let cos = new Cos({
    SecretId: 'xxx', // 身份识别 ID
    SecretKey: 'COS_SECRETKEY', // 身份密钥
});
  4:使用
  cos.putObject({
    Bucket: 'xxx-xxx', /* 存储桶: */
    Region: 'ap-guangzhou',     /* 存储桶所在地域,必须字段 */
    Key: uid+'',              /* 必须是字符串 */
    StorageClass: 'STANDARD',  // 固定值
    Body: 文件对象, // 上传文件对象
    onProgress: (progressData)=> {
        上传进度
        console.log(JSON.stringify(progressData));
    }
}, (err, data)=> {
  // 上传成功或者失败的回调
    console.log(err || data);
}); -->
    <el-upload
      class="avatar-uploader"
      action="https://jsonplaceholder.typicode.com/posts/"
      :show-file-list="false"
      :on-success="handleAvatarSuccess"
      :before-upload="beforeAvatarUpload"
      :http-request="httprequest"
    >
      <img v-if="imageUrl" :src="imageUrl" class="avatar">
      <i v-else class="el-icon-plus avatar-uploader-icon" />
    </el-upload>
  </div>
</template>

<script>
import Cos from 'cos-js-sdk-v5'
const cos = new Cos({
  SecretId: 'xxx', // 身份识别 ID
  SecretKey: 'xxx' // 身份密钥
})
export default {
  data() {
    return {
      imageUrl: ''
    }
  },
  methods: {
    handleAvatarSuccess(res, file) {
      this.imageUrl = URL.createObjectURL(file.raw)
    },
    beforeAvatarUpload(file) {
      console.log(file)
      // 定义上传图片的大小
      const size = file.size / 1024 / 1024 < 1
      // 定义上传图片的类型
      const type = file.type === 'image/png'
      if (!size) {
        // 条件不满足时提示信息
        this.$message.error('请上传1M的图片')
      }
      if (!type) {
        // 条件不满足时提示信息
        this.$message.error('请上传png格式的图片')
      }
      return size && type
    },
    // 自定义上传
    httprequest(res) {
      // 打印获得当前res的值.res.file就等于当前上传的对象
      console.log(res, 2121)
      cos.putObject({
        Bucket: 'qqqzzz123-1308460128', /* 存储桶: */
        Region: 'ap-chongqing', /* 存储桶所在地域,必须字段 */
        Key: res.file.uid + '', /* 必须是字符串 */
        StorageClass: 'STANDARD', // 固定值
        Body: res.file, // 上传文件对象
        onProgress: (progressData) => {
          // 上传进度
          console.log(JSON.stringify(progressData))
        }
      }, (err, data) => {
        // 上传成功或者失败的回调
        console.log(err || data)
        // 默认显示的图片等于上传成功后的图片
        this.imageUrl = 'http://' + data.Location
      })
    }
  }
}
</script>

<style>
  .avatar-uploader .el-upload {
    border: 1px dashed #d9d9d9;
    border-radius: 6px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
  }
  .avatar-uploader .el-upload:hover {
    border-color: #409EFF;
  }
  .avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    width: 178px;
    height: 178px;
    line-height: 178px;
    text-align: center;
  }
  .avatar {
    width: 178px;
    height: 178px;
    display: block;
  }
</style>

### Element Plus Upload 组件自定义图片上传实现 为了实现在 Element Plus 中使用 `el-upload` 组件进行自定义图片上传,可以利用组件提供的属性和事件来定制化需求。具体来说,通过设置 `before-upload` 和 `http-request` 属性能够控制文件上传前的操作以及指定自定义上传请求逻辑[^1]。 下面是一个简单的例子展示如何配置这些选项以适应特定的应用场景: #### HTML 部分 ```html <template> <div id="app"> <!-- 使用 el-upload 组件 --> <el-upload class="upload-demo" action="" :on-preview="handlePreview" :on-remove="handleRemove" :before-upload="beforeAvatarUpload" :http-request="customHttpRequest" list-type="picture-card" :file-list="fileList" > <i class="el-icon-plus"></i> </el-upload> <el-dialog :visible.sync="dialogVisible"> <img width="100%" :src="dialogImageUrl" alt="" /> </el-dialog> </div> </template> ``` #### JavaScript (Vue.js)部分 ```javascript <script> export default { data() { return { fileList: [], // 文件列表 dialogImageUrl: '', // 对话框显示URL dialogVisible: false, // 控制对话框可见性 }; }, methods: { handleRemove(file, fileList) { console.log(file, fileList); }, handlePreview(file) { this.dialogImageUrl = file.url; this.dialogVisible = true; }, beforeAvatarUpload(file) { // 自定义验证函数 const isJPG = file.type === 'image/jpeg'; const isLt2M = file.size / 1024 / 1024 < 2; if (!isJPG) { this.$message.error('上传头像图片只能是 JPG 格式!'); } if (!isLt2M) { this.$message.error('上传头像图片大小不能超过 2MB!'); } return isJPG && isLt2M; }, customHttpRequest(option) { // 定义自己的HTTP请求处理方式 let formData = new FormData(); formData.append("file", option.file); axios({ url: '/your/upload/endpoint', // 替换成实际接口地址 method: 'post', headers: {'Content-Type': 'multipart/form-data'}, data: formData, onUploadProgress(progressEvent){ var percentCompleted = Math.round( (progressEvent.loaded * 100) / progressEvent.total ); option.onProgress({percent: percentCompleted}); } }).then((res)=>{ option.onSuccess(res.data); // 成功回调 }).catch(err=>{ option.onError(err); // 错误回调 }); } } }; </script> ``` 此代码片段展示了如何创建一个带有预览功能和支持移除操作的图片上传界面,并且实现了对上传文件类型的限制(仅允许JPEG格式),同时也设置了最大尺寸约束(不超过2MB)。此外,还指定了一个自定义的方法来进行真正的服务器端通信,在这个过程中还可以监听进度变化并更新UI状态[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值