日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue 圖片裁剪上傳組件的實現

瀏覽:116日期:2022-10-31 17:38:26

先看一下總體效果:

上傳文件做了大小和類型的限制,在動圖中無法展現出來。

vue 圖片裁剪上傳組件的實現

使用file類型的input實現選擇本地文件

但是瀏覽器原生的文件上傳按鈕的顏值不盡人意,而且按鈕上的文字是無法改變的,我需要把這個上傳文件的按鈕改造一下。

方法1:使用label元素來觸發一個隱藏的file類型的 input元素;(缺點:在多人開發時,可能出現重復的元素id,導致難以預料的bug)

<input type='file' id=’up_file_input’ v-show=’false’ ><label for=’up_file_input’></label> 方法2:或者在這個label元素的click事件函數中手動觸發文件上傳按鈕的click事件。

<input type='file' v-show=’false’ ref='inputFileUp' ><label @click=’$refs.inputFileUp.click()’></label>

使用input的change事件獲取選擇的本地圖片并進行校驗

上傳圖片的校驗規則及提示語由父組件通過 prop 傳遞給子組件,格式如下:

const img_valit = { type: /^.*.(jpg|png|jpeg)$/i, // 文件格式校驗 type_error_msg: ’上傳頭像圖片只能是 jpg 或者 png 格式!’, size: 3, // 文件大小校驗 size_error_msg: ’上傳的圖片大小不能超過3MB’}

這里需要注意: 需要在上傳文件按鈕的click事件中手動清空這個文件類型輸入框的值,解決選擇和上次相同的文件之后無法觸發 change事件的問題

function fileInputClick(event) { event.target.value = '';}function coverImgChange(event) { const file = event.target.files[0]; // 在組件的自定義屬性中定義一個變量 originalFile 來保存當前上傳的文件 this.$options._myOpt.originalFile = file; // 獲取對文件的校驗規則 const { type, size, type_error_msg, size_error_msg } = this.img_valit; // 校驗文件類型和文件大小 const isJPG_PNG = type.test(file.name), isLt5M = file.size / 1024 / 1024 <= size; !isLt5M && this.$message.error(size_error_msg); !isJPG_PNG && this.$message.error(type_error_msg); // 文件通過校驗,打開裁剪彈窗 if (isJPG_PNG && isLt5M) { this.cropImgUrl = window.URL.createObjectURL(file); this.dialogVisible = true; } }

打開彈窗進行圖片裁剪

彈窗使用的 Element-UI 中的彈窗, 圖片裁剪是第三方插件 vue-cropper。圖片裁剪插件中的一些配置可以參考插件官方文檔,下面的代碼中省略了配置部分的代碼。

<el-dialog :visible.sync='dialogVisible' width=’800px’> <div class='dialog-content'> <div class='cropper-image'> <vue-cropper ref='cropper' :img='cropImgUrl' @realTime='realTime' ></vue-cropper> </div> <!-- 圖片裁剪之后的預覽 --> <div class='preview-wrapper'> <div : > <div :style='previews.div'> <img :src='http://www.b3g6.com/bcjs/previews.url' :style='[previews.img]'> </div> </div> <p class='preview-text'>裁剪結果預覽</p> </div> </div> <div slot='footer' class='dialog-footer'> <button @click='dialogEsc()'>取 消</button> <button @click='dialogSure()'>確 定</button> </div> </el-dialog>

向服務器發送請求上傳圖片

上傳文件接口中,向后臺發送請求的參數為 {image: 文件本身(File類型), filename: 文件名}

function realTime(data) { this.previews = data;}// 裁剪彈窗中確定按鈕的點擊事件function dialogSure() { const ajaxConfig = { headers: { 'Content-Type': 'multipart/form-data' } }; // 上傳圖片的文件名 let cropFileName = this.$options._myOpt.originalFile.name.match(/([^/]+)(?=.)/gi)[0] || Date.now().toString(); this.$refs.cropper.getCropBlob(blob => { // IE 和 Edge 不支持 File 構造函數 let cropFile = new File( [blob], cropFileName.toString() + '.' + (this.cropperConfig.outputType || 'jpg'), { type: blob.type } ); let upParams = new FormData(); upParams.append('image', cropFile); upParams.append('filename', cropFile.fileName); axios.post(this.up_action, upParams).then(({ data }) => { if (data.status === 0) { this.coverUlr = window.URL.createObjectURL(blob); this.pathToParent({ fileId: data.result.fileId, fileExt: data.result.fileExt }); } else { this.coverUlr = ''; this.pathToParent({ fileId: '', fileExt: '' }); } }); }); this.dialogVisible = false; } // 向父組件傳遞上傳文件成功之后后臺返回的數據 function pathToParent(filePath) { this.$emit('getFilePath', filePath); }

以上就是vue 圖片裁剪上傳組件的實現的詳細內容,更多關于vue 圖片裁剪上傳組件的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
99在线|亚洲一区二区| 亚洲人妖在线| 亚洲日本在线观看视频| 日韩中文影院| 国产精品白浆| 9色精品在线| 欧美香蕉视频| 久久精品一区二区三区中文字幕| 亚洲精品一二| 国产婷婷精品| 欧美 日韩 国产一区二区在线视频| 91麻豆精品| 亚洲97av| 色综合视频一区二区三区日韩| 国产精品美女| 亚洲国产日韩欧美在线| 丝袜av一区| 999久久久亚洲| 天堂中文av在线资源库| 国产一区日韩| 久久av电影| 久久av网址| 日韩福利视频导航| 亚洲精品乱码| 亚洲啊v在线免费视频| 亚洲精品综合| 蜜桃视频第一区免费观看| 国产亚洲高清视频| 日韩精品一级中文字幕精品视频免费观看| 在线观看精品| 久久精品主播| 99国产一区| 免费久久99精品国产| 亚洲天堂日韩在线| 日韩在线成人| 日本不卡的三区四区五区| 免费欧美在线视频| 日本中文字幕不卡| 国产日韩欧美一区二区三区 | 男人操女人的视频在线观看欧美| 亚洲人妖在线| 超级白嫩亚洲国产第一| 99pao成人国产永久免费视频| 日韩高清不卡在线| 韩国三级一区| 亚洲另类视频| 色在线视频观看| 亚洲精品大片| 国产一区二区三区四区二区 | 黄色成人在线网址| 国产精品亚洲成在人线| 秋霞影院一区二区三区| 亚洲精品美女91| 日韩欧美一区二区三区免费看| 免费的成人av| аⅴ资源天堂资源库在线| 亚洲影视一区| 女生影院久久| 日本少妇精品亚洲第一区| 日韩国产综合| 日韩高清一区| 伊人久久国产| 日韩精品中文字幕一区二区| 在线看片福利| 午夜视频一区二区在线观看| 日韩精品2区| 国产日韩在线观看视频| 亚洲免费黄色| 国产精品13p| 青青草精品视频| 午夜av一区| 国产成人免费| 日韩激情综合| 伊人成人在线视频| 国产一区二区三区免费在线| 日本不卡视频一二三区| 激情久久久久久| 精品国产一级| 日韩国产91| 亚洲一区二区三区高清不卡| 国产成人精品一区二区三区视频| 日本不卡在线视频| 日韩午夜av| 久久久久久久久久久妇女| 国产精品入口久久| 中文一区一区三区免费在线观| 韩国精品主播一区二区在线观看| 国产乱人伦精品一区| 美女久久一区| 久久精品一区二区不卡| 久久精品国产亚洲一区二区三区| 亚洲香蕉视频| 欧美日韩视频一区二区三区| 动漫av一区| 国产精品毛片久久久| 蜜桃一区二区三区在线观看| 136国产福利精品导航网址| 国产99在线| 精品国产亚洲一区二区三区大结局| 日本91福利区| av不卡在线| 日韩在线观看不卡| 精品免费在线| 国产视频一区二区在线播放| 免费成人在线观看| 视频一区中文| 福利视频一区| 欧美国产视频| 国产精品中文| 国产视频网站一区二区三区| 日韩不卡在线观看日韩不卡视频| 蜜桃久久精品一区二区| 亚洲在线成人| 亚洲在线成人| 亚洲一区久久| 中文一区一区三区免费在线观 | 国产精品成人**免费视频| 中文字幕一区二区三区四区久久| 99国产精品视频免费观看一公开 | 好看的av在线不卡观看| 久久视频国产| 婷婷六月综合| 精品在线99| 红桃视频亚洲| 免费看的黄色欧美网站| 欧美日韩日本国产亚洲在线| 五月婷婷亚洲| 久久亚洲欧美| 色综合视频一区二区三区日韩 | 日本少妇精品亚洲第一区| 日韩专区视频网站| 视频一区中文字幕精品| 欧美综合精品| 欧美激情五月| 色综合五月天| 国产精选在线| 亚洲91视频| 日韩午夜一区| 蜜臀va亚洲va欧美va天堂| 日日夜夜免费精品| 青青草精品视频| 国产精品白丝久久av网站| 精品美女在线视频| 日韩一区自拍| 欧美日韩视频| 日韩欧美美女在线观看| 国产精品三p一区二区| 国产精品99一区二区三| 亚洲成人二区| 视频一区视频二区在线观看| 亚洲+小说+欧美+激情+另类| 国产精品久久久一区二区| 成人午夜网址| 影视先锋久久| 中文字幕亚洲在线观看| 国产女人18毛片水真多18精品| 国产成人精品亚洲线观看| 久久久精品日韩| 久久电影一区| 国产精品红桃| 日韩av首页| 亚洲精品伦理| 国内一区二区三区| 国内精品福利| 日韩激情一二三区| 精品资源在线| 亚洲精品电影| 日本在线成人| 高清av一区| 国产精品社区| 国产精品videossex| 色婷婷久久久| 亚洲一区二区三区久久久| 麻豆国产一区| 欧美日韩国产免费观看| 国产日本亚洲| 成人啊v在线| 日韩精品亚洲一区二区三区免费| 麻豆精品久久| 尤物在线精品| 国产欧美另类| 欧美中文一区二区| 国产日韩欧美一区二区三区 | 激情黄产视频在线免费观看| 视频一区二区欧美| 精品久久国产一区| 视频一区二区欧美| 国产精选在线| 日韩精品一区二区三区中文字幕| 精品无人区麻豆乱码久久久| 亚洲综合日韩| 精品国内亚洲2022精品成人| 日韩午夜黄色| 色婷婷色综合| 蜜臀av一区二区在线免费观看| 久久精品国产久精国产| 亚洲综合二区| sm久久捆绑调教精品一区| 中文字幕亚洲精品乱码| 91一区二区|