最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vuejs使用FormData實(shí)現(xiàn)ajax上傳圖片文件

 更新時(shí)間:2017年08月08日 10:55:19   作者:wmui  
本篇文章主要介紹了vuejs使用FormData實(shí)現(xiàn)ajax上傳圖片文件,具有一定的參考價(jià)值,有興趣的可以了解一下

我相信很多使用vuejs的朋友,都有采用ajax上傳圖片的需求,因?yàn)榍昂蠖朔蛛x后,我們希望都能用ajax來(lái)解決數(shù)據(jù)問(wèn)題,傳統(tǒng)的表單提交會(huì)導(dǎo)致提交成功后頁(yè)面跳轉(zhuǎn),而使用ajax能夠無(wú)刷新上傳圖片等文件。

其實(shí)已經(jīng)有朋友封裝了相關(guān)的npm包,但是我想說(shuō)用原生的js api來(lái)實(shí)現(xiàn),也用不了多少代碼,而且更靈活,能使用原生就盡量用原生。接下來(lái)就以一個(gè)簡(jiǎn)單的頭像上傳來(lái)說(shuō)明如何使用。

效果圖

前端實(shí)現(xiàn)

<template>
 <div class="admin">
 <div class="admin-content">
  <div class="edit">
  <div class="avatar">
   <div class="img">
   <img :src="avatar" @click="setAvatar">
   <span>更改</span>
   </div>
   <input type="file" name="avatar" accept="image/gif,image/jpeg,image/jpg,image/png" style="display:none" @change="changeImage($event)" ref="avatarInput">
  </div>
  <button type="button" @click="edit">確認(rèn)修改</button>
  </div>
 </div>
 </div>
</template>
<script>
export default {
 data() {
 return {
  avatar: this.$store.state.administrator.avatar,
 }
 },
 methods: {
 edit() {
  // 修改了頭像
  if (this.$refs.avatarInput.files.length !== 0) {
   var image = new FormData()
   image.append('avatar', this.$refs.avatarInput.files[0])
   this.axios.post('/avatar', image, {
   headers: {
    "Content-Type": "multipart/form-data"
   }
   })
  }
  }) 
 },
 setAvatar() {
  this.$refs.avatarInput.click()
 },
 changeImage(e) {
  var file = e.target.files[0]
  var reader = new FileReader()
  var that = this
  reader.readAsDataURL(file)
  reader.onload = function(e) {
  that.avatar = this.result
  }
 }
 }
}
</script>

解釋一下上面代碼的意思,當(dāng)我們點(diǎn)擊圖片會(huì)觸發(fā)setAvatar函數(shù),該函數(shù)會(huì)觸發(fā)input的click事件,于是就會(huì)彈出文件選擇框,當(dāng)我們選擇了一張圖片后,觸發(fā)chageImage函數(shù),這個(gè)函數(shù)的功能就是預(yù)覽你上傳的圖片,單后當(dāng)我們點(diǎn)擊修改按鈕后,就會(huì)把資源傳到后端

后端處理

后端接收到你上傳的資源,肯定要把資源保存到服務(wù)器,我就以Nodejs來(lái)說(shuō)明,我使用formidable解析上傳的數(shù)據(jù)

exports.avatar = function(req, res, next) {
 let form = new formidable.IncomingForm()
 form.parse(req, function(err, fields, files) {
 if (err) {
  return res.json({
  "code": 500,
  "message": "內(nèi)部服務(wù)器錯(cuò)誤"
  })
 }

 // 獲取后綴名
 let extname = path.extname(files.avatar.name)
 let oldpath = files.avatar.path;
 let newpath = './public/avatar' + extname;
 let avatarName = 'avatar' + extname;
 // 更改名字和路徑
 fs.rename(oldpath, newpath, function(err) {
  if (err) {
  return res.json({
   "code": 401,
   "message": "圖片上傳失敗"
  })
  }
 })
 // 更新數(shù)據(jù)庫(kù)
 db.updateMany('users', { "user": username }, { "avatar": avatarName },
  function(err, result) {
  if (err) {
   return res.json({
   "code": 401,
   "message": "頭像更新失敗"
   })
  }
  return res.json({
   "code":200,
   "message": "頭像上傳成功"
  })
  })
 })
}

后端解析ajax提交的數(shù)據(jù)和解析采用傳統(tǒng)表單提交的數(shù)據(jù)方法一樣,如果你是做前端開(kāi)發(fā)的,不了解后端代碼影響不大。
說(shuō)這么多,還是來(lái)個(gè)demo吧,https://github.com/wmui/vueblog,這個(gè)小項(xiàng)目后臺(tái)有個(gè)頭像修改的功能,是使用ajax上傳圖片的,核心代碼百行不到,前后端分離。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • element-ui中el-table不顯示數(shù)據(jù)的問(wèn)題解決

    element-ui中el-table不顯示數(shù)據(jù)的問(wèn)題解決

    這篇文章主要介紹了element-ui中el-table不顯示數(shù)據(jù)的問(wèn)題解決,這是最近在做列表首頁(yè)時(shí)遇到的一個(gè)問(wèn)題,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 基于Vue2.X的路由和鉤子函數(shù)詳解

    基于Vue2.X的路由和鉤子函數(shù)詳解

    下面小編就為大家分享一篇基于Vue2.X的路由和鉤子函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • Vue3實(shí)現(xiàn)動(dòng)態(tài)導(dǎo)入Excel表格數(shù)據(jù)的方法詳解

    Vue3實(shí)現(xiàn)動(dòng)態(tài)導(dǎo)入Excel表格數(shù)據(jù)的方法詳解

    在開(kāi)發(fā)工作過(guò)程中,我們會(huì)遇到各種各樣的表格數(shù)據(jù)導(dǎo)入,動(dòng)態(tài)數(shù)據(jù)導(dǎo)入可以減少人為操作,減少出錯(cuò)。本文為大家介紹了Vue3實(shí)現(xiàn)動(dòng)態(tài)導(dǎo)入Excel表格數(shù)據(jù)的方法,需要的可以參考一下
    2022-11-11
  • Vue使用konva實(shí)現(xiàn)一個(gè)簡(jiǎn)便的流程圖

    Vue使用konva實(shí)現(xiàn)一個(gè)簡(jiǎn)便的流程圖

    日常開(kāi)發(fā)中我們可能碰到流程圖的需求,實(shí)現(xiàn)流程圖的庫(kù)有很多,如果我們想要實(shí)現(xiàn)一個(gè)簡(jiǎn)便的流程圖可以使用konva庫(kù)來(lái)實(shí)現(xiàn),下面我們就來(lái)看一下具體的實(shí)現(xiàn)過(guò)程,需要的朋友可以參考下
    2023-08-08
  • vue全局引入scss(mixin)

    vue全局引入scss(mixin)

    本文主要介紹了?vue全局引入scss,我們?cè)趯?xiě)VUE的時(shí)候,會(huì)使用scss,也會(huì)做一些通用樣式,方便使用,在寫(xiě)好的通用樣式的時(shí)候,每次都要單文件導(dǎo)入,剛開(kāi)始寫(xiě)的時(shí)候,感覺(jué)還好,后面工程量大了后,就顯得麻煩,那么本文就全局導(dǎo)入scss樣式,下面來(lái)看詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • 談?wù)刅ue.js——vue-resource全攻略

    談?wù)刅ue.js——vue-resource全攻略

    本篇文章主要介紹了談?wù)刅ue.js——vue-resource全攻略,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • 詳解vue 命名視圖

    詳解vue 命名視圖

    這篇文章主要介紹了vue 命名視圖的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • vue多級(jí)復(fù)雜列表展開(kāi)/折疊及全選/分組全選實(shí)現(xiàn)

    vue多級(jí)復(fù)雜列表展開(kāi)/折疊及全選/分組全選實(shí)現(xiàn)

    這篇文章主要介紹了vue多級(jí)復(fù)雜列表展開(kāi)/折疊及全選/分組全選實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Vue實(shí)現(xiàn)帶進(jìn)度條的文件拖動(dòng)上傳功能

    Vue實(shí)現(xiàn)帶進(jìn)度條的文件拖動(dòng)上傳功能

    這篇文章主要介紹了Vue實(shí)現(xiàn)帶進(jìn)度條的文件拖動(dòng)上傳功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • vue移動(dòng)端的左右滑動(dòng)事件詳解

    vue移動(dòng)端的左右滑動(dòng)事件詳解

    這篇文章主要為大家詳細(xì)介紹了vue移動(dòng)端的左右滑動(dòng)事件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06

最新評(píng)論

余庆县| 永德县| 沁水县| 疏附县| 沐川县| 抚顺市| 河池市| 甘谷县| 阿拉善盟| 孝感市| 仁布县| 长治市| 诏安县| 成安县| 出国| 扎赉特旗| 德清县| 海门市| 介休市| 女性| 竹北市| 临洮县| 张家口市| 肥城市| 泰来县| 藁城市| 边坝县| 宜章县| 丹阳市| 五家渠市| 墨竹工卡县| 黑河市| 三河市| 边坝县| 双鸭山市| 绥化市| 彭州市| 寿宁县| 黑河市| 贞丰县| 南汇区|