Vue + Element UI圖片上傳控件使用詳解
上一篇 Vue +Element UI +vue-quill-editor 富文本編輯器及插入圖片自定義 主要是寫(xiě)了富文本編輯器的自定義及編輯器中圖片的上傳并插入到編輯內(nèi)容,這篇文章單獨(dú)介紹一下element UI 圖片上傳控件的使用。首先要安裝element并中引入,安裝引入過(guò)程這里不再贅述。
1.引用element 上傳控件。
<el-upload action="/mgr/common/imgUpload"http://這里需要配置一下文件上傳地址(跨域) list-type="picture-card" accept="image/*" :limit="imgLimit" :file-list="productImgs" :multiple="isMultiple" :on-preview="handlePictureCardPreview" :on-remove="handleRemove" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload" :on-exceed="handleExceed" :on-error="imgUploadError"> <i class="el-icon-plus"></i> </el-upload> <el-dialog :visible.sync="dialogVisible"> <img width="100%" :src="dialogImageUrl" alt=""> </el-dialog>
2.js
export default {
data() {
return {
dialogImageUrl: '',
dialogVisible: false,
productImgs: [],
isMultiple: true,
imgLimit: 6
}
},
methods: {
handleRemove(file, fileList) {//移除圖片
console.log(file, fileList);
},
handlePictureCardPreview(file) {//預(yù)覽圖片時(shí)調(diào)用
console.log(file);
this.dialogImageUrl = file.url;
this.dialogVisible = true;
},
beforeAvatarUpload(file) {//文件上傳之前調(diào)用做一些攔截限制
console.log(file);
const isJPG = true;
// const isJPG = file.type === 'image/jpeg';
const isLt2M = file.size / 1024 / 1024 < 2;
// if (!isJPG) {
// this.$message.error('上傳頭像圖片只能是 JPG 格式!');
// }
if (!isLt2M) {
this.$message.error('上傳圖片大小不能超過(guò) 2MB!');
}
return isJPG && isLt2M;
},
handleAvatarSuccess(res, file) {//圖片上傳成功
console.log(res);
console.log(file);
this.imageUrl = URL.createObjectURL(file.raw);
},
handleExceed(files, fileList) {//圖片上傳超過(guò)數(shù)量限制
this.$message.error('上傳圖片不能超過(guò)6張!');
console.log(file, fileList);
},
imgUploadError(err, file, fileList){//圖片上傳失敗調(diào)用
console.log(err)
this.$message.error('上傳圖片失敗!');
}
}
}
3.controller
@RequestMapping(value = "/imgUpload")
public Wrapper imgUpload(HttpServletRequest req, MultipartHttpServletRequest multiReq)
throws IOException {
System.out.println("---" + fileUploadPath);//我這里用的springboot 在application.properties中配置,使用@Value 獲取的文件上傳目錄
MultipartFile file = multiReq.getFile("file");
String originalFilename = file.getOriginalFilename();
String suffix = originalFilename.substring(originalFilename.indexOf("."));
String localFileName = MD5Util.md5(file.getInputStream()) + suffix;
File localFile = new File(fileUploadPath + localFileName);
if (!localFile.exists()) {
localFile.createNewFile();
FileOutputStream fos = new FileOutputStream(
localFile);
FileInputStream fs = (FileInputStream) multiReq.getFile("img").getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fs.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fos.close();
fs.close();
} else {
log.info("文件已存在?。?);
}
return WrapMapper.wrap(
Wrapper.SUCCESS_CODE,
Wrapper.SUCCESS_MESSAGE,
"http://localhost:8080/img/" + localFileName);//這里是我執(zhí)行封裝的返回結(jié)果,也可以使用map,
}
4.MD5工具類(lèi)
import java.io.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
private static char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'a', 'b', 'c', 'd', 'e', 'f'};
public static String getMd5Sum(String inputStr)
throws NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("MD5");
byte[] inputStrByte = inputStr.getBytes();
digest.update(inputStrByte, 0, inputStrByte.length);
byte[] md5sum = digest.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 16; i++) {
char[] ob = new char[2];
ob[0] = Digit[md5sum[i] >> 4 & 0x0F];
ob[1] = Digit[md5sum[i] & 0x0F];
String s = new String(ob);
sb.append(s);
}
return sb.toString();
}
/**
* 對(duì)字符串進(jìn)行 MD5 加密
*
* @param str
* 待加密字符串
*
* @return 加密后字符串
*/
public static String md5(String str) {
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
md5.update(str.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e.getMessage());
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e.getMessage());
}
byte[] encodedValue = md5.digest();
int j = encodedValue.length;
char finalValue[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte encoded = encodedValue[i];
finalValue[k++] = Digit[encoded >> 4 & 0xf];
finalValue[k++] = Digit[encoded & 0xf];
}
return new String(finalValue);
}
/**
* 簽名字符串
*
* @param text
* 需要簽名的字符串
* @param sign
* 簽名結(jié)果
* @return 簽名結(jié)果
*/
public static boolean verify(String text, String sign) {
String mysign = md5(text);
if (mysign.equals(sign)) {
return true;
} else {
return false;
}
}
/**
* 對(duì)文件進(jìn)行 MD5 加密
*
* @param file
* 待加密的文件
*
* @return 文件加密后的 MD5 值
* @throws IOException
*/
public static String md5(File file) throws IOException {
FileInputStream is = new FileInputStream(file);
return md5(is);
}
public static String md5(InputStream inputStream) throws IOException {
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
int n = 0;
byte[] buffer = new byte[1024];
do {
n = inputStream.read(buffer);
if (n > 0) {
md5.update(buffer, 0, n);
}
} while (n != -1);
inputStream.skip(0);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e.getMessage());
} finally {
inputStream.close();
}
byte[] encodedValue = md5.digest();
int j = encodedValue.length;
char finalValue[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte encoded = encodedValue[i];
finalValue[k++] = Digit[encoded >> 4 & 0xf];
finalValue[k++] = Digit[encoded & 0xf];
}
return new String(finalValue);
}
}
5.效果

6.主要參考文檔 element 官方中文文檔,文檔中好多屬性介紹很籠統(tǒng)不夠詳細(xì),個(gè)人感覺(jué)比較坑。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue:el-input輸入時(shí)限制輸入的類(lèi)型操作
這篇文章主要介紹了vue:el-input輸入時(shí)限制輸入的類(lèi)型操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
vue實(shí)現(xiàn)導(dǎo)航標(biāo)題欄隨頁(yè)面滾動(dòng)漸隱漸顯效果
這篇文章主要介紹了vue實(shí)現(xiàn)導(dǎo)航標(biāo)題欄隨頁(yè)面滾動(dòng)漸隱漸顯效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
詳解使用vue腳手架工具搭建vue-webpack項(xiàng)目
本篇文章主要介紹了詳解使用vue腳手架工具搭建vue-webpack項(xiàng)目,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-05-05
vue2+element-ui+nodejs實(shí)現(xiàn)圖片上傳和修改圖片到數(shù)據(jù)庫(kù)的方法
在Web開(kāi)發(fā)中經(jīng)常需要使用圖片,有時(shí)候需要對(duì)圖片進(jìn)行上傳,這篇文章主要給大家介紹了關(guān)于vue2+element-ui+nodejs實(shí)現(xiàn)圖片上傳和修改圖片到數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04

