vue-element-admin上傳圖片的功能

在vue后臺管理系統(tǒng)里面胁勺,有時候會遇到一個圖片上傳的功能装畅,做這個功能的時候的思路是這樣的:
1:首選由前端寫一個圖片上傳的upload標簽骚露,選擇本地的圖片文件之后
2:調(diào)用后端給的接口棘捣,以二進制文件的形式傳給后端服務(wù)器
3:服務(wù)器進行處理,處理完成之后將服務(wù)器的主機名加到圖片名稱的前綴上
4:返回一個有服務(wù)器主機+圖片名稱的在線就可以訪問的鏈接給到前端
5:前端直接將在線鏈接路徑渲染在界面顯示圖片

在vue-element-admin里面的具體的實踐

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

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

3:新建一個index.vue頁面


開始寫代碼:

<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:效果如下:

5:有些業(yè)務(wù)需求是這樣的宣鄙,給定一個圖片尺寸,比如說最大寬度是500默蚌,最大高度是300冻晤,如果上傳的圖片尺寸超過這個范圍,在上傳的時候绸吸,一個提示明也,不符合這個尺寸的都無法上傳。
這個時候惯裕,就需要進行判斷了

需要在upload里面添加一個:before-upload方法


然后在 methods里面寫一下這個方法的實現(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>

如果不符合尺寸的時候,會有一個彈框進行提示握玛。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末够傍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挠铲,更是在濱河造成了極大的恐慌冕屯,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拂苹,死亡現(xiàn)場離奇詭異安聘,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門浴韭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丘喻,“玉大人,你說我怎么就攤上這事念颈∪郏” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵榴芳,是天一觀的道長嗡靡。 經(jīng)常有香客問我,道長窟感,這世上最難降的妖魔是什么叽躯? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮肌括,結(jié)果婚禮上点骑,老公的妹妹穿的比我還像新娘。我一直安慰自己谍夭,他們只是感情好黑滴,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著紧索,像睡著了一般袁辈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上珠漂,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天晚缩,我揣著相機與錄音,去河邊找鬼媳危。 笑死荞彼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的待笑。 我是一名探鬼主播鸣皂,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼暮蹂!你這毒婦竟也來了寞缝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤仰泻,失蹤者是張志新(化名)和其女友劉穎荆陆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體集侯,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡被啼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年帜消,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趟据。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡券犁,死狀恐怖术健,靈堂內(nèi)的尸體忽然破棺而出汹碱,到底是詐尸還是另有隱情,我是刑警寧澤荞估,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布咳促,位于F島的核電站,受9級特大地震影響勘伺,放射性物質(zhì)發(fā)生泄漏跪腹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一飞醉、第九天 我趴在偏房一處隱蔽的房頂上張望冲茸。 院中可真熱鬧,春花似錦缅帘、人聲如沸轴术。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逗栽。三九已至,卻和暖如春失暂,著一層夾襖步出監(jiān)牢的瞬間彼宠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工弟塞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凭峡,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓决记,卻偏偏與公主長得像想罕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子霉涨,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345