<template>
<a-upload
v-model:file-list="fileList"
name="avatar"
list-type="picture-card"
class="avatar-uploader"
:show-upload-list="false"
:before-upload="beforeUpload">
<img
v-if="imageUrl"
:src="data:imageUrl"
alt="avatar" />
<div v-else>
<plus-outlined></plus-outlined>
<div class="ant-upload-text">上传</div>
</div>
</a-upload>
<a-button @click="handleUpload"> 开始上传 </a-button>
</template>
<script lang="ts" setup>
import { PlusOutlined, LoadingOutlined } from '@ant-design/icons-vue';
import { message } from 'ant-design-vue';
import { ref } from 'vue'; const imageUrl = ref<string>(''); /**
* 图片转base64
*/
const getBase64 = (img, callback: (base64Url: string) => void) => {
const reader = new FileReader();
reader.addEventListener('load', () => callback(reader.result as string));
reader.readAsDataURL(img);
}; /**
* 上传文件之前的钩子 (可以恒返回false 从而手动上传)
* @param file 上传的文件
* @returns 布尔值或者Promise对象 若返回 false 则停止上传
*/
let fileList:any = ref(null);
const beforeUpload = (file) => {
const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';
if (!isJpgOrPng) {
message.error('只能上传图片文件!');
} const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
message.error('头像图片不能超过 2MB!');
} // 用于选择图片文件后本地实时预览
getBase64(file, (base64Url: string) => {
imageUrl.value = base64Url;
}); fileList.value = [file]; return false;
// return isJpgOrPng && isLt2M;
}; /**
* 手动图片上传
*/
const handleUpload = async () => {
const formData = new FormData();
formData.append('files', fileList.value[0]);
await api.curriculum.uploadFile.request(fileList.value[0]);
fileList.value = [];
message.success('上传成功');
};
</script>
<style>
.avatar-uploader > .ant-upload {
width: 128px;
height: 128px;
}
.ant-upload-select-picture-card i {
font-size: 32px;
color: #999;
} .ant-upload-select-picture-card .ant-upload-text {
margin-top: 8px;
color: #666;
}
</style>

如果是手动上传的话action不用要 那个是提供给自动上传的url

change事件 也不再需要 因为那个是基于action请求状态触发,手动上传的时候 所有的逻辑均可在beforeUpdate中 编写

antd vue3 图片 手动上传的更多相关文章

  1. layui框架实现多图片手动上传和随表单提交方法

    首先在官方文档并没有手动上传的说明文档,这里手动实现上传原理是:在表单中有三个按钮,分别是上传图片按钮.隐藏上传按钮.表单提交按钮,点击上传图片按钮之后,图片添加在前端但是并没有真正的上传,而是在点击 ...

  2. 基于HTML5的可预览多图片Ajax上传

    一.关于图片上传什么什么的 在XHTML的时代,我们使用HTML file控件上传图片一次只能上传一张.要一次上传多图,做法是借助于flash.例如swfupload.js.可惜,使用复杂的点,比如f ...

  3. PHP系列 | Thinkphp3.2 上传七牛 bad token 问题 [ layui.upload 图片/文件上传]

    前端代码 <div class="logo_out" id="upload-logo"></div> JS代码 /** * 上传图片 * ...

  4. xhEditor实现ctrl+v粘贴word图片并上传

    自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了.一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器) ...

  5. kindeditor实现ctrl+v粘贴word图片并上传

    Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能.但是无法 ...

  6. ueditor+复制word图片粘贴上传

    Chrome+IE默认支持粘贴剪切板中的图片,但是我要发布的文章存在word里面,图片多达数十张,我总不能一张一张复制吧?Chrome高版本提供了可以将单张图片转换在BASE64字符串的功能.但是无法 ...

  7. asp.net实现图片在线上传并在线裁剪

    1.说明 接上一篇文章uploadify实现多附件上传完成后,又突然用到头像上传并在线裁剪.在网上找个众多例子都没有符合要求的,有一篇文章写的不错,就是文旺老兄写的这篇Asp.Net平台下的图片在线裁 ...

  8. 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)

    涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...

  9. springmvc图片文件上传接口

    springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller; import java.awt.image.Buffer ...

  10. base64格式的图片如何上传到oss

    ---恢复内容开始--- 对于base64图片的上传这个东西,一直是一个问题尤其是上传到oss.我们这次开发由于需要修剪图片,使用了h5的很多新特性. h5修剪图片,使用了我们的canvas.这个步骤 ...

随机推荐

  1. 从零开始:在Qt中使用OpenGL绘制指南

    本文只介绍基本的 QOpenGLWidget 和 QOpenGLFunctions 的使用,想要学习 OpenGL 的朋友,建议访问经典 OpenGL 学习网站:LearnOpenGL CN 本篇文章 ...

  2. 开箱即用!推荐一款Python开源项目:DashGo,支持定制改造为测试平台!

    大家好,我是狂师. 市面上的开源后台管理系统项目层出不穷,对应所使用到的技术栈也不尽相同. 今天给大家推荐一款开源后台管理系统: DashGo,不仅部署起来非常的简单,而且它是基于Python技术栈实 ...

  3. zk源码—5.请求的处理过程

    大纲 1.服务器的请求处理链 (1)Leader服务器的请求处理链 一.PrepRequestProcessor请求预处理器 二.ProposalRequestProcessor事务投票处理器 三.S ...

  4. Python 迭代器和生成器概念

    目录 迭代器的介绍 自定义迭代器 省略的迭代器 生产器的介绍 yield的普通用法 yield的高级用法 yidle的实际应用案例 总结 迭代器的介绍 迭代器的定义: 迭代器(Iterator)是 P ...

  5. DPDI(Dispatch PDI)kettle调度管理平台环境部署升级

    1.DPDI演示环境 DPDI online登录域名:http://dpdi.pizzalord.site 用户名:dpdi 密 码:dpdi 2.DPDI下载 DPDI online部署包下载地址: ...

  6. 2025dsfz-KMP学习笔记

    KMP 前言:这把高端局 关于KMP 时间复杂度为 \(O(n+m)\) 的优秀字符串查找算法. 适用于在句子/文章中查找一段文字(词语). KMP实现 关于共同前后缀数组(PMT) 说人话就是 \( ...

  7. Socket实践:使用云服务器当代理连接公司内网,简单实现跨局域网调用部署在公司局域网里的api接口

    公司的代码是可以在公网上访问到,但这些代码里用了部署在公司局域网的api.如果有时想在家写代码看看这个wpf软件的运行情况,就运行不起来,因为主要业务都得连接公司局域网的api接口.我就想用自己的阿里 ...

  8. 遇到的问题之“动态数据源报错-recyle error java.lang.InterruptedException”

    Druid出现DruidDataSource - recyle error - recyle error java.lang.InterruptedException: null异常排查与解决 一.线 ...

  9. 爬虫入门(urllib与requests)

    urllib与requests 一.urllib的学习 学习目标 了解urllib的基本使用 1.urllib介绍 除了requests模块可以发送请求之外, urllib模块也可以实现请求的发送,只 ...

  10. vue3 基础-单项数据流

    本篇还是了解关于组件间传值, 核心点是了解子组件只能接收父组件传递的数据而不能反向修改从而影响到其他组件造成的混乱局面. 传多值的问题 当我们要传递数据很多的时候, 可以将数据都存在一个对象中, 直接 ...