vue-element-admin上傳圖片的功能 2021-02-18

在vue后臺(tái)管理系統(tǒng)里面,有時(shí)候會(huì)遇到一個(gè)圖片上傳的功能绒净,做這個(gè)功能的時(shí)候的思路是這樣的:
1:首選由前端寫一個(gè)圖片上傳的upload標(biāo)簽见咒,選擇本地的圖片文件之后
2:調(diào)用后端給的接口,以二進(jìn)制文件的形式傳給后端服務(wù)器
3:服務(wù)器進(jìn)行處理挂疆,處理完成之后將服務(wù)器的主機(jī)名加到圖片名稱的前綴上
4:返回一個(gè)有服務(wù)器主機(jī)+圖片名稱的在線就可以訪問的鏈接給到前端
5:前端直接將在線鏈接路徑渲染在界面顯示圖片

在vue-element-admin里面的具體的實(shí)踐

1:在store/modules里面新建一個(gè)api.js
將上傳圖片至服務(wù)器的后端小伙伴給的接口寫在這個(gè)js里面

image
const baseUrl = 'http://39.xx.xxx.1xx/yyexploreplatform'
const state = {
  fileUpload: baseUrl + '/upload/file'
}

export default { state }

2:打開store/getters.js
getters.js

const getters = {
  fileUpload: state => state.api.fileUpload,
}
export default getters

image

3:新建一個(gè)index.vue頁面

image

開始寫代碼:

<template>
  <div class="app-container">
        <el-form ref="nextProjectForm" :model="nextProjectForm" label-width="100px">
          <el-form-item label="插入圖片">
            <el-upload
              class="avatar-uploader"
              :action="fileUpload"
              :headers="{ Authorization: token }"
              :show-file-list="false"
              :on-success="handleAvatarSuccess">

              <img
                v-if="nextProjectForm.publicWelfareUrl"
                :src="nextProjectForm.publicWelfareUrl"
                class="avatar"/>
              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
            </el-upload>
          </el-form-item>           
        </el-form>
  </div>
</template>
<script>
import { mapGetters } from "vuex";
export default {
  data() {
    return {
      nextProjectForm: {
        publicWelfareUrl: "",
      },
    };
  },
  computed: {
    ...mapGetters(["fileUpload", "token"])
  },
  methods: {

    handleAvatarSuccess(response, file, fileList) {
      if (response && response.data && response.data.url) {
        this.$set(this.nextProjectForm, "publicWelfareUrl", response.data.url);
      }
    },

  }
};
</script>
<style lang='scss'>
.avatar-uploader .el-upload {
  border: 1px dashed #d9d9d9;
  border-radius: 6px;
  cursor: pointer;
  position: relative;
  overflow: hidden;
}
.avatar-uploader .el-upload:hover {
  border-color: #409eff;
}
.avatar-uploader-icon {
  font-size: 28px;
  color: #8c939d;
  width: 178px;
  height: 178px;
  line-height: 178px;
  text-align: center;
}
.avatar {
  width: 178px;
  height: 178px;
  display: block;
}
</style>

4:效果如下:

image

5:有些業(yè)務(wù)需求是這樣的改览,給定一個(gè)圖片尺寸,比如說最大寬度是500囱嫩,最大高度是300恃疯,如果上傳的圖片尺寸超過這個(gè)范圍,在上傳的時(shí)候墨闲,一個(gè)提示今妄,不符合這個(gè)尺寸的都無法上傳。
這個(gè)時(shí)候鸳碧,就需要進(jìn)行判斷了

需要在upload里面添加一個(gè):before-upload方法

image

然后在 methods里面寫一下這個(gè)方法的實(shí)現(xiàn)過程代碼

 //對圖片大小的限制
    handleImagesUrlBefore:function(file){
                var _this = this;
                return new Promise(function(resolve, reject) {
                    var reader = new FileReader();
                    reader.onload = function(event) {
                        var image = new Image();
                        image.onload = function () {
                            var width = this.width;
                            var height = this.height;
                            if (width>500 ){
                                _this.$alert('圖片寬度尺寸必須在500之內(nèi)盾鳞!', '提示', {confirmButtonText: '確定'});
                                reject();
                            }
                            if (height >300) {
                                _this.$alert('圖片高度尺寸必須在300之內(nèi)!', '提示', {confirmButtonText: '確定'});
                                reject();
                            }
                            resolve();
                        };
                        image.src = event.target.result;
                    }
                    reader.readAsDataURL(file);
                });
            },

完整的參考代碼:

<template>
  <div class="app-container">
        <el-form ref="nextProjectForm" :model="nextProjectForm" label-width="100px">
          <el-form-item label="插入圖片">
            <el-upload
              class="avatar-uploader"
              :action="fileUpload"
              :before-upload="handleImagesUrlBefore"
              :headers="{ Authorization: token }"
              :show-file-list="false"
              :on-success="handleAvatarSuccess">

              <img
                v-if="nextProjectForm.publicWelfareUrl"
                :src="nextProjectForm.publicWelfareUrl"
                class="avatar"/>
              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
            </el-upload>
          </el-form-item>           
        </el-form>
  </div>
</template>
<script>
import { mapGetters } from "vuex";
export default {
  data() {
    return {
      nextProjectForm: {
        publicWelfareUrl: "",
      },
    };
  },
  computed: {
    ...mapGetters(["fileUpload", "token"])
  },
  methods: {
    //對圖片大小的限制
    handleImagesUrlBefore:function(file){
                var _this = this;
                return new Promise(function(resolve, reject) {
                    var reader = new FileReader();
                    reader.onload = function(event) {
                        var image = new Image();
                        image.onload = function () {
                            var width = this.width;
                            var height = this.height;
                            if (width>500 ){
                                _this.$alert('圖片寬度尺寸必須在500之內(nèi)瞻离!', '提示', {confirmButtonText: '確定'});
                                reject();
                            }
                            if (height >300) {
                                _this.$alert('圖片高度尺寸必須在300之內(nèi)腾仅!', '提示', {confirmButtonText: '確定'});
                                reject();
                            }
                            resolve();
                        };
                        image.src = event.target.result;
                    }
                    reader.readAsDataURL(file);
                });
            },

    handleAvatarSuccess(response, file, fileList) {
      if (response && response.data && response.data.url) {
        this.$set(this.nextProjectForm, "publicWelfareUrl", response.data.url);
      }
    },

  }
};
</script>
<style lang='scss'>
.avatar-uploader .el-upload {
  border: 1px dashed #d9d9d9;
  border-radius: 6px;
  cursor: pointer;
  position: relative;
  overflow: hidden;
}
.avatar-uploader .el-upload:hover {
  border-color: #409eff;
}
.avatar-uploader-icon {
  font-size: 28px;
  color: #8c939d;
  width: 178px;
  height: 178px;
  line-height: 178px;
  text-align: center;
}
.avatar {
  width: 178px;
  height: 178px;
  display: block;
}
</style>

如果不符合尺寸的時(shí)候,會(huì)有一個(gè)彈框進(jìn)行提示套利。

image

Vue.js專題

原作者:祈澈菇?jīng)?br> 鏈接:http://www.reibang.com/p/383e1f2f4276
來源:簡書
著作權(quán)歸作者所有推励。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處肉迫。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末验辞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子喊衫,更是在濱河造成了極大的恐慌跌造,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異壳贪,居然都是意外死亡陵珍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門违施,熙熙樓的掌柜王于貴愁眉苦臉地迎上來互纯,“玉大人,你說我怎么就攤上這事磕蒲∥敖悖” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵亿卤,是天一觀的道長愤兵。 經(jīng)常有香客問我,道長排吴,這世上最難降的妖魔是什么秆乳? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮钻哩,結(jié)果婚禮上屹堰,老公的妹妹穿的比我還像新娘。我一直安慰自己街氢,他們只是感情好扯键,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著珊肃,像睡著了一般荣刑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伦乔,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天厉亏,我揣著相機(jī)與錄音,去河邊找鬼烈和。 笑死爱只,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的招刹。 我是一名探鬼主播恬试,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疯暑!你這毒婦竟也來了训柴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤缰儿,失蹤者是張志新(化名)和其女友劉穎畦粮,沒想到半個(gè)月后散址,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乖阵,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宣赔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瞪浸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片儒将。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖对蒲,靈堂內(nèi)的尸體忽然破棺而出钩蚊,到底是詐尸還是另有隱情,我是刑警寧澤蹈矮,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布砰逻,位于F島的核電站,受9級(jí)特大地震影響泛鸟,放射性物質(zhì)發(fā)生泄漏蝠咆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一北滥、第九天 我趴在偏房一處隱蔽的房頂上張望刚操。 院中可真熱鬧,春花似錦再芋、人聲如沸菊霜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鉴逞。三九已至,卻和暖如春司训,著一層夾襖步出監(jiān)牢的瞬間华蜒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工豁遭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叭喜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓蓖谢,卻偏偏與公主長得像捂蕴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子闪幽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容