van-uploader上传图片

文章描述了一个使用Vue.js的van-field和van-uploader组件实现的单张人脸图片上传功能,包括删除图片、文件大小限制、上传前验证、上传后处理等步骤,并且在上传完成后提交表单至后台接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、单张人脸图片上传

deletable 是否显示删除按钮,默认false

:max-count="1" 最大上传图片张数

v-model="uploader"  uploader列表类型,组件默认显示的图片

uploader 组件默认显示图片的数组,有具体格式[{url:"xxxxx图片地址" }]

:max-size="5 * 1024 * 1024" 文件大小限制

@oversize="onOversize"  限制文件上传函数 超过最大max-size 的时候

:before-read="beforeRead" 上传图片前

:after-read="afterRead" 上传图片后

:before-delete="delImg" 删除图片时

   <van-form ref="forms">
      <!-- 人脸信息 -->
      <van-field
        name="test"
        label="人脸信息"
        :rules="[{ required: true, message: '请上传人脸信息' }]"
      >
        <template #input>
          <van-uploader
            :deletable="!detail"
            :max-count="1"
            v-model="uploader"
            :max-size="5 * 1024 * 1024"
            @oversize="onOversize"
            :before-read="beforeRead"
            :after-read="afterRead"
            :before-delete="delImg"
          />
        </template>
      </van-field>
      <!-- 表单提交按钮,flag属性 在上传图片时禁用按钮,图片上传成功解除禁用 -->
       <van-button
          round
          block
          :disabled="flag"
          type="info"
          native-type="submit"
          @click="subForm()"
          >提交</van-button
        >     
    </van-form>


import { uploadImg } from "@/api/xxx/xxx/upload"; // 到入图片上传接口


  data() {
    return {
      flag: false, // 上传时候禁用上传按钮
      form: {
        faceImg: [], //实际要传的 接口转换后的 图片数据
      },
      uploader: [], // 组件默认显示图片信息
    };
  },

函数方法:

methods:{
    // 获取详情信息
      getDetail(id).then((res) => {
        if (res.code == 200) {
          // 默认显示人脸数据 格式:uploader[{url:'xxxx图片地址'}]
          const imgObj = {};
          imgObj.url = this.GLOBAL.imgUrl + res.data.faceImg;
          // this.form.faceImg 获取详情时候是空 赋值
          this.form.faceImg.push(imgObj);
          // 赋值默认显示图片列表
          this.uploader = this.form.faceImg;
          // console.log("###form", this.form);
          if (this.form.状态字段== "2") {
            this.detail = false; // 切换成详情
          } else {
            this.detail = true; // 切换成详情
          }
        }
      });
    // -----------------------------------------------------------------------
    // 上传图片文件
    // 传一个照片 获取一次uploadImg接口,把file.file文件做参数,要formData类型保存
    // 把后端传的数据保存
    afterRead(file) {
      this.flag = true;
      file.status = "uploading";
      file.message = "上传中...";
      let formData = new FormData(); // 上传图片要formData类型
      // "uploadImage" 这个字段要看后端需要并进行定义
      formData.append("uploadImage", file.file); 
      uploadImg(formData).then((response) => {
        if (response.code == 200) {
          file.status = "done";
          file.message = "上传完成";
          this.flag = false;
          this.form.faceImg.push(response.msg); // 实际提交表单需要传的 接口转换后 图片数据
          this.form.faceImg = this.form.faceImg[0]; // 因为只有一张,直接传1个字符串
        } else {
          file.status = "failed";
          file.message = "上传失败";
        }
      });
    },
    // 上传图片前返回布尔值
    beforeRead(file) {
      if (
        file.type !== "image/png" &&
        file.type !== "image/jpeg" &&
        file.type !== "image/jpg"
      ) {
        this.$toast.fail("请上传 png,jpg格式图片");
        return false;
      }
      return true;
    },
    // 文件上传大小限制
    onOversize(file) {
      this.$toast.fail("图片大小不能超过5M!");
    },
    //删除图片
    delImg(file, detail) {
      return new Promise((resolve, reject) => {
        this.$dialog
          .confirm({
            message: "确定删除图片?",
          })
          .then(() => {
            // this.form.faceImg.splice(detail.index, 1);
            this.form.faceImg = []; // 只有一张直接清空数组
            this.$toast.success("删除成功");
            resolve();
          })
          .catch((error) => {
            this.$toast.success("已取消");
            reject(error);
          });
      });
    },

    // 表单提交
    subForm() {
    // 表单验证
      this.$refs.forms.validate().then(() => {
          // 验证通过
          addPerson(this.form).then((response) => {
            if (response.code == 200) {
              this.$toast.success(
                "上传记录成功",
                this.$router.push({ path: "/xxx" })
              );
            } else {
              this.$toast.fail("上传记录失败");
            }
          });
        })
        .catch(() => {
          console.log("false");
          //验证失败
        });

}}

axios方法:

// 上传图片 参数需要file文件
export function uploadImg(file) {
    return request({
        url: '/xxx/xxx/uploadImg',
        method: 'post',
        data: file,
    })
}

补充:

如果遇到这种情况axios请求中需要加上headers:{。。。}

// 注册页面上传图片文件
export function uploadImg(data) {
  return request({
    url: '/system/bbuploadImg/uploadImg',
    method: 'post',
    data: data, 
    headers: {
      'Content-Type': 'multipart/form-data' // 注意:通常 Axios 会自动设置这个头部,所以这一步可以省略
    }
  })
}

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识点解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“橙点同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值