首页 > 其他分享 >基于vue-Ant实现图片上传

基于vue-Ant实现图片上传

时间:2022-11-07 12:31:26浏览次数:50  
标签:vue return res data Ant file message 上传

引言:

上传是将信息(网页、文字、图片、视频等)通过网页或者上传工具发布到远程服务器上的过程。如何使用Ant-design-vue中的 a-upload 上传组件进行图片或者视频的上传呢?

正文:

1.template中:

<a-form-model-item label="图片" prop="sheetPicture">
<div style="display: flex; align-items: center">
<a-upload name="avatar" class="avatar-uploader" action :customRequest="uploadImage" list-type="picture-card" :file-list="fileList" :show-file-list="false" :before-upload="beforeUpload" :remove="handleDeleteChange" accept=".jpg,.JPG,.jpeg,.JPEG,.png,.PNG,.gif,.GIF">
<div v-if="!defectSearchForm.sheetPicture">
<a-icon type="plus" />
<div class="ant-upload-text">上传</div>
</div>
<img v-else :src="defectSearchForm.sheetPicture" alt="avatar" />
</a-upload>
<a-tooltip placement="right">
<template slot="title">
<span>上传前请确认无误后再进行上传或删除操作</span>
</template>
<a-icon type="info-circle" />
</a-tooltip>
</div>
</a-form-model-item>

2.js中:

定义data:

data(){
return {
loading: false,
fileList: [],
defectSearchForm: {},

}
}

详情信息获取:

//根据id查询缺陷详情 (根据id获取详情的API getDefectSearchById)
getDefectSearchInfoById(id) {
let _this = this;
getDefectSearchById(id)
.then(({ data: res }) => {
if (res.code != 0) {
_this.$message.config({
maxCount: 1,
});
_this.$message.destroy();
return _this.$message.error(res.data);
}
console.log('缺陷详情', res);
if (JSON.stringify(res.data) != '{}') {
_this.defectSearchForm = res.data;
if (_this.defectSearchForm.sheetPicture) {
_this.fileList = [
{
uid: '-1',
name: 'image.png',
status: 'done',
url: _this.defectSearchForm.sheetPicture
}
];
} else {
_this.fileList = [];
}
}
})
.catch((error) => {
console.log(error);
return false;
});
},

图片上传部分:

//图片上传(上传图片API updateImage: '/sys/oss/upload')
uploadImage(file) {
let _this = this,
data = file.file,
fileParams = new FormData();
_this.loading = true;
fileParams.append('file', data);
console.log('fileParams', fileParams);
updateImage(fileParams).then(({ data: res }) => {
if (res.code != 0) {
_this.loading = false;
return _this.$message.error(res.msg);
}
_this.defectSearchForm.sheetPicture = 'http://' + res.data.src;
_this.loading = false;
});
},

beforeUpload(file) {
const isType = file.type === 'image/jpeg' || 'image/png' || 'image/jpg';
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isType) {
this.$message.config({
maxCount: 1,
});
this.$message.destroy();
this.$message.error('图片格式错误,请上传图片!');
}
if (!isLt2M) {
this.$message.config({
maxCount: 1,
});
this.$message.destroy();
this.$message.error('上传头像图片大小不能超过 2MB!');
}
return isType && isLt2M;
},

// 删除项目图片(删除图片API deleteImage: '/sys/oss/delete')
handleDeleteChange(file) {
console.log('图片删除');
console.log('file',file);
let deletePlantInfoImgurl = file.url.substr(file.url.lastIndexOf('/') + 1);
deleteFile(deletePlantInfoImgurl).then((res) => {
if (res.code != 0) {
return this.$message.error(res.data || res.msg);
}
this.plantInfo.imgurl = '';
this.fileList = [];
this.$message.success('删除成功');
return;
});
},

3.效果:

基于vue-Ant实现图片上传_图片上传

如果你要实现大图预览的话:

previewVisible: false,
previewImage: '',

<a-upload name="avatar" class="avatar-uploader" action @preview="handlePreview" :showUploadList="false" :customRequest="uploadImage" list-type="picture-card" :file-list="fileList" :show-file-list="false" :before-upload="beforeUpload" :remove="handleDeletePlantImageChange" accept=".jpg,.JPG,.jpeg,.JPEG,.png,.PNG,.gif,.GIF">
<div v-if="!defectSearchForm.sheetPicture">
<a-icon type="plus" />
<div class="ant-upload-text">上传</div>
</div>
<img v-else :src="defectSearchForm.sheetPicture" class="avatar" />
</a-upload>
<!-- 此处添加预览,注意 :showUploadList="true" 预览才能使用 -->
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
<img alt="example" style="width: 100%" :src="previewImage" />
</a-modal>

//预览图片
async handlePreview(file) {
console.log('file',file)
if (!file.url && !file.preview) {
file.preview = await getBase64(file.originFileObj);
}
this.previewImage = file.url || file.preview;
this.previewVisible = true;
},

//取消预览
handleCancel(){
this.previewVisible = false;
},

其中 :showUploadList="false" 是否展示 uploadList, 可设为一个对象,用于单独设定 showPreviewIcon 和 showRemoveIcon。此时预览和删除功能消失,如果想更换图片,直接点击即可!

基于vue-Ant实现图片上传_vue_02

总结:

当然,代码肯定不能完全拿来用,可以参考某一部分,这个上传的图片是保存到了第三方的存储平台拿的url,具体看你自己需求吧,希望能给你带来帮助!


标签:vue,return,res,data,Ant,file,message,上传
From: https://blog.51cto.com/u_14562672/5827758

相关文章

  • tomcat + ftp小工具可以进行上传,无法下载
    利用tomcat+ftpServer工具,做了一个上传和下载的功能,结果测试的时候,发现可以上传,但是无法进行下载,输入地址后直接就转到404了,经过排查,发现自己的上传目录没有放到tomcat的......
  • 项目运行npm run dev报错npm ERR! [email protected] dev: `webpack-dev-server --inline --
    目录一、问题描述二、问题原因三、解决方法1.查看vue版本是2.9.62.卸载3.安装4.安装5.正常启动。一、问题描述vue项目运行dev,之前没有问题,但是今天直接报错如下npmER......
  • Ant Design Vue自定义文件上传设置progress进度条
    前言在使用AntDesignVue的upload文件上传功能的时候,我们为了规范前端代码,所以会封装接口请求到对应的ts或js文件并引用,这个时候我们会更多的使用自定义文件上传的功......
  • vue中的key的作用原理
    https://blog.csdn.net/cun_king/article/details/120714227?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-12071422......
  • pdf禁用操作栏 -vue
    1.引入本地pdf文件放置public目录下2.本地data中定义变量路径可以直接用文件名(不需要加路径前缀,因为是在public文件下)3.在文件名后面加上"#toolbar=0"例如:   ......
  • vue在线预览word,excel , pdf组件化
    方法一:如果文件是域名的,可以使用微软免费接口//由于免费的在线查看,不支持ip+端口的形式所以单独处理this.dialog.url='http://view.officeapps.live.com/op/view.aspx?s......
  • Vue面试题44:Vue3为什么要用Proxy代替defineProperty?(总结自B站up主‘前端杨村长’视频,
    分析Vue3中最重大的更新之一就是响应式模块reactivity的重写。主要就是用Proxy替换`defineProperty实现响应式;此变化主要是从性能方面考量;思路属性拦截的几种方......
  • 前端实现文件上传——angular版本+ant design
    html代码<nz-upload*ngIf="uploadParams.parserTypeId==3||uploadParams.parserTypeId==4"style="margin-left:10px"[nzAction]="_uploadPath"......
  • 初识Vue
    模板的理解html中包含了一些JS语法代码,语法分为两种,分别为:1.插值语法(双大括号表达式)2.指令(以v-开头)插值语法1.功能:用于解析标签体内容2.语法:{{xxx}},xx......
  • 谈谈你对 vue 的理解
    whatvue vue是创建用户界面的js框架,是创建spa应用的框架;使用mvvm数据驱动视图模型,后端数据和页面解构分离,后端处理数据,动态显示页面;采用组件化模式,提高代码......