vue实现图片的上传和删除
1 UI库使用ElementUI
安装ElementUI
$ npm install --save-dev element-ui
vue加载ElementUI
import ElementUI from 'element-ui' // 导入elementui库
import 'element-ui/lib/theme-chalk/index.css' // 导入样式
Vue.use(ElementUI)
前端组件
<template>
<!-- 图片上传控件 -->
<el-upload
:action="uploadUrl"
list-type="picture-card"
:limit="5"
:on-preview="handlePreview"
:on-remove="handleRemove"
:on-success="handleUploadSuccess">
<i class="el-icon-plus"></i>
</el-upload>
<!-- 图片预览 -->
<el-dialog :visible.sync="dialogVisible">
<img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>
</template>
<script>
export default {
data () {
return {
imgs: [], // 已上传图片列表
uploadUrl: '/api/uploadImg', // 图片上传接口地址,自定义
dialogImageUrl: '', // 预览图片地址
dialogVisible: false // 图片预览
}
},
methods: {
// 图片预览
handlePreview (file) {
this.dialogImageUrl = file.url
this.dialogVisible = true
},
/**
* 图片上传成功
* 当上传图片时,ElementUI生成图片的Blob对象,然后本地显示
* 接口返回JSON数据{state: 'success', img: 'xxxxxxxxxxxxx.xxx'}
* 把得到的img存储进this.imgs中
*/
handleUpdateSuccess (res, file, fileList) {
if (res.state === 'success') {
this.imgs.push(res.img) // this.imgs记录已上传成功的图片
}
},
/**
* 图片删除
* 由于图片存储在服务器上,ElementUI图片删除只是删除本地显示
* 所以需要调用服务器图片删除接口,我这里接口为'/api/deleteImg'
* 接口返回JSON格式数据:{state: 'success'}
* 然后从this.imgs中删除图片记录
*/
handleRemove (file, fileList) {
const IMG = file.response.img
const INDEX = this.imgs.indexOf(IMG)
if (INDEX > -1) {
this.$http.delete(`/api/deleteImg/${IMG}`).then((res) => { // 服务器删除图片
const data = res.data
if (data.state === 'success') {
this.imgs.splice(INDEX, 1) // 从this.imgs中删除图片记录
}
}).catch ((err) => {
console.error(err);
})
}
}
}
}
</script>
2 后端使用Express + formidable模块
Express安装和使用这里就不详细说明,主要是formidable使用,formidable是一个用来解析表单(尤其文件上传)的node模块
安装 formidable
$ npm install formidable --save
后端代码
const express = require('express');
const router = express.Router();
const path = require('path');
const formidable = require('formidable');
/**
* 上传图片接口
*/
router.post('/uploadImg', function(req, res, next) {
const form = new formidable.IncomingForm();
form.uploadDir = path.join(__dirname, '../upload/img'); // 设置图片路径
form.keepExtensions = true; // 保持扩展名
form.parse(req, function(err, fields, files) {
if (err) throw err;
const saveImgName = files.file.path.split("\\").pop(); // 图片名称
res.json({state: 'success', img: saveImgName}); // 已保存,返回JSON
});
})
/**
* 删除图片接口
*/
router.delete('/deleteImg/:fileName', function(req, res, next) {
const FILE_NAME = req.params.fileName;
const FILE_PATH = path.join(__dirname, `../upload/img/${FILE_NAME}`); // 待删除的图片绝对路径
fs.unlink(FILE_PATH, () => {
res.json({state: 'success'}); // 已删除,返回JSON
})
})
module.exports = router;
vue实现图片的上传和删除的更多相关文章
- Vue项目图片剪切上传——vue-cropper的使用
最近自己在研究vue,然后做了一个小型的后台管理系统用来练手,开发过程中,想到了剪切图片上传用户头像的需求.上网百度了一番,发现好多用的都是vue-cropper.我也就用了,个人感觉还是挺好用的.现 ...
- vue里图片压缩上传组件
//单图上传 <template> <div> <div class="uploader" v-if='!dwimg'> <van-upl ...
- NODE 基于express 框架和mongoDB的cookie和session认证 和图片的上传和删除
源码地址 https://gitee.com/zyqwasd/mongdbSession 本项目的mongodb是本地的mongodb 开启方法可以百度一下 端口是默认的27017 页面效果 1. 注 ...
- vue Base64图片压缩上传OSS
this.compress(result, 800, 0.5).then(val => { //得到压缩图片 let data = val; that.file = that.dataURLto ...
- vue中使用cropperjs进行图片裁剪上传
下面代码直接就可以复制使用了,但是需要在本地下个cropperjs,下载命令:npm install cropperjs --save-dev <template> <div id= ...
- 基于vue + axios + lrz.js 微信端图片压缩上传
业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能 ...
- 在vue的element图片的上传及回调
首先声明,本人用的是element组件写的图片的上传及回调,若非element本方法暂不支持. 下面开始正式讲图片的上传及回调.(本篇拒绝一切花里胡哨,都是干活,言辞粗糙,望请见谅) 1,elemen ...
- vue+axios+elementUI文件上传与下载
vue+axios+elementUI文件上传与下载 Simple_Learn 关注 0.5 2018.05.30 10:20 字数 209 阅读 15111评论 4喜欢 6 1.文件上传 这里主要 ...
- Html5+asp.net mvc 图片压缩上传
在做图片上传时,大图片如果没有压缩直接上传时间会非常长,因为有的图片太大,传到服务器上再压缩太慢了,而且损耗流量. 思路是将图片抽样显示在canvas上,然后用通过canvas.toDataURL方法 ...
随机推荐
- android开发系列之使用xml自定义控件
在android开发的过程中,有的时候面对多个Activity里面一些相同的布局,我们需要写多次相同的代码,同时这种方法给我们的项目维护也带来了很大不便.那么有没有一种可行的办法能够将Activity ...
- Redis专题(2):Redis数据结构底层探秘
前言 上篇文章Redis闲谈(1):构建知识图谱介绍了redis的基本概念.优缺点以及它的内存淘汰机制,相信大家对redis有了初步的认识.互联网的很多应用场景都有着Redis的身影,它能做的事情远远 ...
- wifi认证Portal开发系列(三):portal协议
中国移动WLAN业务PORTAL协议规范介绍 一.用户上线认证流程 上线流程完成用户账号的认证,并把认证结果通知Portal Server,Portal server将会通知WLAN用户并且显示相应的 ...
- 【puppeteer+Node.js安装环境】之WebStorm编辑器运行失败问题:Error: Cannot find module 'puppeteer'并且代码出不来“asnyc”标识以及有红色波浪线解决办法
现象一: module.js:557 throw err; ^ Error: Cannot find module 'puppeteer' at Function.Module._r ...
- ios和mac开发 学习资料
1.WWDC14 Session 409 学习笔记: http://url.cn/Ju2Yt5 2..WWDC14 Session 4092学习笔记: http://url.cn/Rx0mAN 3.i ...
- Android—— 4.2 Vold挂载管理_NetlinkManager (四)
在前文Android-- 4.2 Vold挂载管理_主体构建main (一)中有结构图表示,Vold是kernel与用户层的一个交互管理模块. Android-- 4.2 Vold挂载管理_Volum ...
- mac下spark单机环境配置笔记
1.安装scala 从http://www.scala-lang.org下载scala-2.11.7.tgz并解压缩 将解压缩的文件夹用mv指令移动到/usr/local/share mv [scal ...
- 2014新浪研发project师实习笔试(哈尔滨站)
刚经历了新浪笔试,写篇博客记录一下下.方便以后查看. 一.基础题 1.栈和队列的异同点. 2.算法性能的4个评价标准. 排序算法中最稳定的算法. 那几个算法的空间复杂度是O(1)的. 3.线性表,平衡 ...
- SSL:Ubuntu证书配置
CA证书的配置 Ubuntu上CA证书的配置可以通过工具ca-certificates来方便的进行.该工具默认是随Ubuntu安装的,如果没有可以通过下面的命令来安装: sudo apt-get in ...
- python manage.py shell 的增删改查
python manage.py shell 的增删改查 guoguo-MacBook-Pro:myblog guoguo$ python manage.py shell Python 3.5.1 ( ...