<template>
<div class="uploadTest">
<div
class="wran-hasImg wran"
:style="{width:width+'px',height:height+'px'}"
v-show="!hasImg"
@click="add($event)"
>
<div class="add-wran">
<i class="iconfont icon-add action"></i>
</div>
</div>
<div v-show="hasImg" class="wran-hasNotImg wran" :style="{width:width+'px',height:height+'px'}">
<i class="iconfont icon-delete action" @click="del($event)"></i>
<img ref="curImg" class="curImg" :style="{width:width+'px',height:height+'px'}" />
<div class="mask"></div>
</div>
<input
ref="uploadDom"
type="file"
id="inputBox"
style="border:none;display:none;"
@change="selectImageURL"
accept="image/*"
/>
</div>
</template>
<script>
import Axios from "axios";
export default {
name: "upload", // 內(nèi)飾
props: {
y: {
// 嵌套多張圖片時(shí)的標(biāo)記
type: Number,
default: 0
},
index: {
// 多張圖片時(shí)的標(biāo)記
type: Number,
default: 0
},
url: {
// 云服務(wù)地址
type: String,
default: "https://dev.huaweidun.com:812/api/Tools/WebUpload"
},
imgBackFlag: {
// 是否回顯圖片
type: Boolean,
default: false
},
propCurrentImg: {
// 傳入圖片地址
type: String,
default: ""
},
width: {
// 寬度
type: Number,
default: 100
},
height: {
// 高度
type: Number,
default: 100
},
maxSize: {
// 最大尺寸
// 可接收?qǐng)D片最大尺寸 單位 MB
type: Number,
default: 250
},
minSize: {
// 可接收最小尺寸
type: Number,
default: 0
},
//jpg仅胞,png乳幸,tif,gif
accept: {
type: Array,
default: () => ["jpg", "png", "gif"]
}
},
data() {
return {
hasImg: false,
currentImg: ""
};
},
created() {},
mounted() {
if (this.imgBackFlag && this.propCurrentImg != "") {
this.hasImg = this.imgBackFlag;
this.$refs.curImg.src = this.propCurrentImg;
}
},
watch: {
propCurrentImg(newV, oldV) {
if (this.imgBackFlag) {
this.hasImg = this.imgBackFlag;
if (this.propCurrentImg) {
this.$refs.curImg.src = this.propCurrentImg;
} else {
this.$refs.curImg.src = null;
this.$refs.uploadDom.value = "";
this.hasImg = false;
}
}
}
},
methods: {
add(e) {
if (this.hasImg) {
} else {
this.$refs.uploadDom.click();
}
},
del(e) {
this.$refs.curImg.src = null;
this.$refs.uploadDom.value = "";
this.hasImg = false;
this.$emit("on-delete", "內(nèi)容已清空", this.index, this.y);
},
// 上傳圖片
selectImageURL(e) {
let file = e.target.files[0];
let fileName = e.target.value;
let fileType = fileName
.substring(fileName.lastIndexOf(".") + 1, fileName.length)
.toLowerCase();
if (this.accept.includes(fileType)) {
// console.log("該類(lèi)型可以用 ", fileType);
this.sizeFormate(e, file, fileType);
} else {
this.$emit(
"on-format-error",
file,
"文件格式錯(cuò)誤!當(dāng)前格式" + fileType + "可接收類(lèi)型",
JSON.stringify(this.accept),
this.index
);
this.$refs.uploadDom.value = "";
}
},
sizeFormate(e, file, fileType) {
// console.log("file ", file);
let fileSize = 0;
let bFomateMB = 1024 * 1024; //1M
if (file) {
fileSize = file.size;
// console.log("fileSize ", fileSize);
let curSizeMb = fileSize / bFomateMB;
// 判斷當(dāng)前 文件大小 是否大于 maxSize
if (curSizeMb > this.maxSize) {
// console.log("文件不能大于" + this.maxSize + "MB植榕!");
this.$emit(
"on-exceeded-size",
file,
"上傳文件不能大于" + this.maxSize + "MB",
this.index
);
this.$refs.uploadDom.value = "";
// 判斷當(dāng)前文件 大小 是否 小于0
} else if (curSizeMb <= 0) {
// console.log("文件大小不能為0MB!");
this.$emit("on-exceeded-size", file, "文件大小不能為0MB");
this.$refs.uploadDom.value = "";
} else {
/* 圖片傳輸 部分 */
// param.append("chunk", "0"); // 添加form表單中其他數(shù)據(jù)
// console.log(param.get("file")); // FormData私有類(lèi)對(duì)象,訪問(wèn)不到祈餐,可以通過(guò)get判斷值是否傳進(jìn)去
let config = {
headers: { "Content-Type": "multipart/form-data" }
};
// 添加請(qǐng)求頭
let img = new Image();
let timestamp = Date.parse(new Date());
Axios.get(this.url)
.then(res => {
// console.log("res ", JSON.stringify(res.data));
let param = new FormData(); // 創(chuàng)建form對(duì)象
param.append("name", file.name);
param.append(
"key",
`${res.data.dir}${file.name}${timestamp}.${fileType}`
);
param.append("policy", res.data.policy);
param.append("OSSAccessKeyId", res.data.accessid);
param.append("success_action_status", 200);
param.append("signature", res.data.signature);
param.append("callback", res.data.callback);
param.append("dir", res.data.dir);
param.append("file", file); // 通過(guò)append向form對(duì)象添加數(shù)據(jù)
let uploadUrl = res.data.host;
// console.log(uploadUrl, res.data.host)
let img = new Image();
Axios.post(uploadUrl, param)
.then(res2 => {
// console.log("res2222.data.imgUrl ", res2.data.imgUrl);
if (res2.data.status === "Ok") {
// console.log("res2.data.imgUrl ", res2.data.imgUrl);
let successImgUrl = res2.data.imgUrl;
this.$emit(
"on-success",
successImgUrl,
file,
this.index,
this.y
);
img.onload = () => {
this.hasImg = true;
console.log("this.hasImg ", this.hasImg);
this.$nextTick(() => {
console.log("this.$refs.curImg. ", this.$refs.curImg);
this.$refs.curImg.src = successImgUrl;
});
// this.$refs.curImg.src = successImgUrl;
img.onload = null;
};
img.src = successImgUrl;
}
})
.catch(err => {
// console.log(err);
});
})
.catch(res => {});
}
} else {
// console.log("文件不存在");
}
}
}
};
</script>
<style scoped lang="less">
@font-face {
font-family: "iconfont";
src: url("http://at.alicdn.com/t/font_1744626_0tlyf9dhykx.eot?t=1586424643369"); /* IE9 */
src: url("http://at.alicdn.com/t/font_1744626_0tlyf9dhykx.eot?t=1586424643369#iefix")
format("embedded-opentype"),
/* IE6-IE8 */
url("data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAMUAAsAAAAABwwAAALIAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDBgqBdIFnATYCJAMMCwgABCAFhG0HNhstBsiemjzaRMtKisYAS5+VAHhDfrn2vs3mrikiKmD3gap4POu6GsESwTFoFvrMWLMU8IEcR6gnyaCK9mgPKJ007UyFc0/Gl4eH+73nvn8XBdYis42iOYs2rsBOLxvQzJLXGom1yXzi3mkTKJD5LMtljnH+qQswDiigsTZ1kRRIgt4wdsELPAwE8BAjC3W8fA2oTbJHEYCWksildiFMkiynEL1hYaIzlFHFvjgHsBB9n/5QEAoErcSe2Ln4HNDd18dXBE8Zu8YDEiTLOQGwZQADsgASaLIxPaiGGIN5qOvdpTqJiKVixpJIbCh15w8PEAionF3tBQDSkFF4KInHAwFfSJ+6mgGADrMdCEOYHlRItPrakLQ7bKzW9pYOXhS1PnP3tca7YB6+B9cJ6t610u8MumQeWhmOKwOq3u1Wex3sh1adzzfF3ht3sZpHbU1WT3lfbI1Dk2l9q97fJ7wQz7eP7KJv+b9F8aB8t40sRcLhYu+el+PgLBp2yEzO9Fo6PPt8i0q67SRn8iUnZdIFAw8Teyjvch2Rcco7XPGzf4NjMT61cfWvahIAvObVGIWMU4nhFVAEMMmvlQysk4bMtnBqYk9s5VgO7cZN8DB8MGD7A3xO1wffvpOogoRBcBMNpiSRJT0LGk9F0Cm18JCpdbmnQONqKKsAGeYBiJ91CD4OwPxckCX9A5oQ/9D5BcNDf+xs6CklhruPCtcQsGXBw76UoWuzblzbQzTLXc3LIuYIOk1inJ+TV869ooQuMWViHp1PWsgOlYJbwHHIc+FRlRS+HbvMJhe5uY6mFx1bpaCuRgpcBgLMYoEN84lSGDQ33crneyAyk3NpB6HOPwJqKmmf5cuRN4D8qi4HER7lmQlzkXOTTIg5KFFgLaAf5HKCjTb3S4HPHHNNSE5cyHUaOYaqj7fXFv+3BcCDvRtHEaVIPBMEzQA5DEQ=")
format("woff2"),
url("http://at.alicdn.com/t/font_1744626_0tlyf9dhykx.woff?t=1586424643369")
format("woff"),
url("http://at.alicdn.com/t/font_1744626_0tlyf9dhykx.ttf?t=1586424643369")
format("truetype"),
/* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url("http://at.alicdn.com/t/font_1744626_0tlyf9dhykx.svg?t=1586424643369#iconfont")
format("svg"); /* iOS 4.1- */
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-add:before {
content: "\e81a";
}
.icon-delete:before {
content: "\e7b2";
}
.wran-hasImg {
position: relative;
border: 1px solid #ccc;
.add-wran {
height: 100%;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
z-index: 999;
.icon-add {
font-size: 30px;
&:hover {
font-size: 35px;
cursor: pointer;
}
}
}
}
.wran-hasNotImg {
position: relative;
.curImg {
}
.icon-delete {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 50px;
color: rgb(255, 255, 255);
display: none;
}
&:hover .icon-delete {
display: block;
z-index: 99999;
}
&:hover .mask {
display: block;
opacity: 1;
}
.mask {
position: absolute;
display: none;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(101, 101, 101, 0.6);
color: #ffffff;
opacity: 0;
}
}
.uploadTest {
cursor: pointer;
}
</style>
圖片上傳組件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)敢课,“玉大人旬盯,你說(shuō)我怎么就攤上這事◆崦停” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵接剩,是天一觀的道長(zhǎng)切厘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)懊缺,這世上最難降的妖魔是什么疫稿? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮鹃两,結(jié)果婚禮上遗座,老公的妹妹穿的比我還像新娘。我一直安慰自己俊扳,他們只是感情好途蒋,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著馋记,像睡著了一般号坡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上梯醒,一...
- 那天宽堆,我揣著相機(jī)與錄音,去河邊找鬼茸习。 笑死畜隶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播籽慢,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼浸遗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了嗡综?” 一聲冷哼從身側(cè)響起乙帮,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎极景,沒(méi)想到半個(gè)月后察净,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡盼樟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年氢卡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晨缴。...
- 正文 年R本政府宣布稍途,位于F島的核電站阁吝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏械拍。R本人自食惡果不足惜突勇,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坷虑。 院中可真熱鬧甲馋,春花似錦、人聲如沸迄损。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)芹敌。三九已至共屈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間党窜,已是汗流浹背拗引。 一陣腳步聲響...
- 正文 我出身青樓壤玫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親哼凯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子欲间,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 先說(shuō)明幾點(diǎn):1. 使用Vue 2.x蝴光。2. 這幾個(gè)例子是比較適合我自己項(xiàng)目場(chǎng)景的方案她渴,主要為了記錄下,僅供參考蔑祟。樣...
- 用戶圖片上傳思路: 1.點(diǎn)擊上傳趁耗,通過(guò)一個(gè)input type="file"選擇你要上傳的圖片2.點(diǎn)擊確定,馬上上...
- 寫(xiě)在前面:這個(gè)只是對(duì)小程序提供的API進(jìn)行了簡(jiǎn)單的封裝疆虚,并沒(méi)有什么特別牛的技術(shù)苛败,記錄下小程序的開(kāi)發(fā)過(guò)程而已 感謝參...
- common/components 路徑下新建Upload.php 調(diào)用第一種方法:可在common\config...
- 代碼 HTML js css 引用 使用 將組件全局注冊(cè)以后,直接使用v-modal綁定即可径簿,綁定的值為一張圖片的...