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

el-upload?文件上傳組件的使用講解

 更新時(shí)間:2024年02月23日 15:36:53   作者:前端初見  
Upload?上傳文件這個(gè)功能是我們?cè)谄髽I(yè)實(shí)際開發(fā)當(dāng)中使用頻率是非常高的這樣一個(gè)文件上傳的功能,element?ui組件組也給我們提供了上傳的組件,本文給大家介紹el-upload?文件上傳組件的使用,感興趣的朋友跟隨小編一起看看吧

Upload 上傳文件

element-ui官網(wǎng)
element ui=>upload上傳組件
Upload 上傳文件這個(gè)功能是我們?cè)谄髽I(yè)實(shí)際開發(fā)當(dāng)中使用頻率是非常高的這樣一個(gè)文件上傳的功能,,element ui組件組也給我們提供了上傳的組件。所有我們一定要熟悉掌握它

使用之前先進(jìn)行一下element ui的安裝和配置

打開終端=>輸入npm i element-ui -S

npm i element-ui -S

就拿其中的一個(gè)拖拽上傳一個(gè)例子進(jìn)行說(shuō)說(shuō)吧


el-upload拖拽上傳官網(wǎng)源代碼

<el-upload
  class="upload-demo"
  drag
  action="https://jsonplaceholder.typicode.com/posts/"
  multiple>
  <i class="el-icon-upload"></i>
  <div class="el-upload__text">將文件拖到此處,或<em>點(diǎn)擊上傳</em></div>
  <div class="el-upload__tip" slot="tip">只能上傳jpg/png文件,且不超過(guò)500kb</div>
</el-upload>

接下來(lái)咱們就創(chuàng)建一個(gè)vue組件進(jìn)行使用和講解

1.先搭建一個(gè)vue項(xiàng)目
vue項(xiàng)目搭建可以參考這篇文章
2.使用element-ui和創(chuàng)建vue組件
配置element-ui
main.js

import Vue from 'vue'
import App from './App.vue'
import './registerServiceWorker'
import router from './router'
import store from './store'
// 引入element ui
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.config.productionTip = false
Vue.use(ElementUI);
new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
})

創(chuàng)建一個(gè)組件,用于放el-upload
upload.vue,首先先把element的組件放進(jìn)來(lái),接下來(lái)再進(jìn)行更改配置

<template>
  <div>
    <el-upload class="upload-demo" drag action="https://jsonplaceholder.typicode.com/posts/" multiple>
      <i class="el-icon-upload"></i>
      <div class="el-upload__text">將文件拖到此處,或<em>點(diǎn)擊上傳</em></div>
      <div class="el-upload__tip" slot="tip">只能上傳jpg/png文件,且不超過(guò)500kb</div>
    </el-upload>
  </div>
</template>
<script>
export default {
  data() {
    return {
    }
  }
}
</script>
<style scoped></style>

展示upload組件,為了方便我就不配置路由了,直接在App.vue引入展示
App.vue

<template>
  <div id="app">
    <uploadView/>
  </div>
</template>
<script>
// 引入創(chuàng)建的upload.vue組件
import uploadView from './views/upload.vue'
export default{
  components:{
    uploadView
  }
}
</script>
<style scope>
</style>

首次展示效果

el-upload參數(shù)講解

文件上傳

使用el-upload組件完成,action 是后端地址,是后端請(qǐng)求的接口地址。
常用參數(shù):

  • action 后臺(tái)路徑,前端負(fù)責(zé)手機(jī),然后傳給后臺(tái),比如存到數(shù)據(jù)庫(kù)等等
  • div class=“el-upload__text”
  • div class=“el-upload__tip” slot=“tip”

div的文字自己根據(jù)需求可以自行更改

圖片上傳

imgUpload圖片上傳組件封裝

<template>
  <div>
    <!-- 圖片上傳 -->
    <el-upload class="avatar-uploader" action="https://jsonplaceholder.typicode.com/posts/" :show-file-list="false"
      :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
      <img v-if="imageUrl" :src="imageUrl" class="avatar">
      <i v-else class="el-icon-plus avatar-uploader-icon"></i>
    </el-upload>
  </div>
</template>
<script>
export default {
  data() {
    return {
      imageUrl: ''
      // 接受我們上傳圖片的地址,上傳成功以后給的地址
    };
  },
  methods: {
    // 上傳成功的回調(diào)
    handleAvatarSuccess(res, file) {
      //demo 轉(zhuǎn)換成url,后期可以換成后端給我們返回的地址
      this.imageUrl = URL.createObjectURL(file.raw);
      // 轉(zhuǎn)化可以顯示頁(yè)面的地址,其實(shí)正常開發(fā)中已經(jīng)可以拿到后端返回的地址,可以直接使用的
    },
    // 上傳之前的回調(diào)
    beforeAvatarUpload(file) {
      // isJPG圖片格式是否符合我們的規(guī)定
      const isJPG = file.type === 'image/jpeg';
      // isLt2M 文件大小是否符合我們的規(guī)定
      const isLt2M = file.size / 1024 / 1024 < 2; 
      if (!isJPG) {
        this.$message.error('上傳頭像圖片只能是 JPG 格式!');
      }
      if (!isLt2M) {
        this.$message.error('上傳頭像圖片大小不能超過(guò) 2MB!');
      }
      return isJPG && isLt2M;
    }
  }
}
</script>
<style scoped>
/* 圖片上傳樣式 */
.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>

把App.vue展示的組件替換為我們的imgUpload組件

<template>
  <div id="app">
    <!-- 文件上傳 -->
    <!-- <uploadView/> -->
    <!-- 圖片上傳 -->
    <imgUpload/>
  </div>
</template>
<script>
// 引入創(chuàng)建的upload.vue組件
// 文件上傳
import uploadView from './views/upload.vue'
// 圖片上傳
import imgUpload from './views/imgUpload.vue'
export default{
  components:{
    uploadView,
    imgUpload
  }
}
</script>
<style>
</style>

el-upload 常用屬性

  • action可以根據(jù)我們的需求改為后端地址
  • headers 設(shè)置上傳的請(qǐng)求頭部
  • method 設(shè)置上傳請(qǐng)求方法
  • multiple 是否支持多選文件
  • disabled 是否禁用上傳
  • data 上傳時(shí)附帶的額外參數(shù)
  • name 上傳的文件字段名
  • limit 允許上傳文件的最大數(shù)量
  • with-credentials 支持發(fā)送cookie憑證信息
  • show-file-list 是否顯示已上傳文件列表
  • accept 接受上傳的文件類型
  • drag 是否啟用拖拽上傳
  • on-success 上傳成功的回調(diào)
  • before-upload 準(zhǔn)備上傳的回調(diào)
  • list-type列表展示的形式或者類型 text/picture/picture-card
  • list-type: 文件列表的類型,‘text’ | ‘picture’ | ‘picture-card’。
  • auto-upload 是否自動(dòng)上傳文件
  • file-list/v-model:file-list 默認(rèn)上傳文件
  • http-request 覆蓋默認(rèn)的 Xhr 行為,允許自行實(shí)現(xiàn)上傳文件的請(qǐng)求
  • on-success 文件上傳成功時(shí)的鉤子
  • on-error 文件上傳失敗時(shí)的鉤子
  • on-progress 文件上傳時(shí)的鉤子
  • on-change 文件狀態(tài)改變時(shí)的鉤子,添加,上傳成功和失敗都會(huì)被調(diào)用
  • on-exceed 當(dāng)超出限制時(shí)執(zhí)行的鉤子
  • before-upload 文件上傳之前的鉤子,參數(shù)為上傳的文件, 若返回false或者返回 Promise 且被 reject,則停止上傳。
  • before-remove 刪除文件之前的鉤子,參數(shù)為上傳的文件和文件列表, 若返回 false 或者返回 Promise 且被 reject,則停止刪除。
  • abort 取消上傳請(qǐng)求
  • submit 手動(dòng)上傳文件列表
  • clearFiles 清空已上傳的文件列表(該方法不支持在 before-upload 中調(diào)用)
  • handleStart 手動(dòng)選擇文件
  • handleRemove 手動(dòng)移除文件。 file 和rawFile 已被合并。
  • on-preview 查看按鈕=>對(duì)應(yīng)一個(gè)回調(diào),回調(diào)參數(shù)對(duì)應(yīng)我們當(dāng)前點(diǎn)擊的文件 官方點(diǎn)擊文件列表中已上傳的文件時(shí)的鉤子
handlepreview (file)

on-remove 刪除按鈕=>對(duì)應(yīng)一個(gè)回調(diào),回調(diào)參數(shù)對(duì)應(yīng)我們當(dāng)前點(diǎn)擊的刪除的文件和剩余的文件列表 文件列表移除文件時(shí)的鉤子

 handleremove (file,filelist)

更多的查看官網(wǎng)即可

踩坑

  • 設(shè)置了Content-Type: multipart/form-data;此時(shí)請(qǐng)求一直沒(méi)有隨機(jī)數(shù)boundary=----WebKitFormBoundarypzSlbADtTRuFx5FC。
  • 如果設(shè)置了全局的content-type,會(huì)發(fā)現(xiàn)上傳接口設(shè)置multipart/form-data是不起作用的,因?yàn)闆](méi)有Boundary,所以上傳必定失敗,服務(wù)器500。
  • 然后嘗試手動(dòng)添加Boundary,這次錯(cuò)誤變400了
  • 后來(lái)通過(guò)查詢資料,說(shuō)不用設(shè)置Content-Type: multipart/form-data;只要參數(shù)是formData形式,瀏覽器就會(huì)自動(dòng)將請(qǐng)求頭的Content-Type轉(zhuǎn)成Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypzSlbADtTRuFx5FC。
  • 但是我不設(shè)置的話就是默認(rèn)的application/json。
  • 于是查閱資料發(fā)現(xiàn)axios的transformRequest屬性可以在向服務(wù)器發(fā)送請(qǐng)求數(shù)據(jù)之前修改請(qǐng)求數(shù)據(jù),因?yàn)槲覀兊恼?qǐng)求在默認(rèn)的post請(qǐng)求方式時(shí)Content-Type的值是application/json,需要去掉默認(rèn)的值,這樣瀏覽器就可以自動(dòng)添加了。
  globObj.$axios({
    url: url,
    method: 'post',
    transformRequest: [function(data, headers) {
      // 去除post請(qǐng)求默認(rèn)的Content-Type
      delete headers['Content-Type']
      return data
    }],
    data: formData,
    timeout: 300000
  }).then(res => {
    ElMessage.success('資產(chǎn)添加成功');
  }).catch((err) => {
    console.log(err);
  });

如果還要傳其他的參數(shù),其他的參數(shù)必須也要append進(jìn)去,否則可能會(huì)報(bào)參數(shù)錯(cuò)誤。

const formData = new FormData();
formData.append('file', file);
// 其他參數(shù)
formData.append('mailSys', mailSys);

到此這篇關(guān)于el-upload 文件上傳組件的使用的文章就介紹到這了,更多相關(guān)el-upload 上傳組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue實(shí)例中data使用return包裹的方法

    vue實(shí)例中data使用return包裹的方法

    今天小編就為大家分享一篇vue實(shí)例中data使用return包裹的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Vue 理解之白話 getter/setter詳解

    Vue 理解之白話 getter/setter詳解

    這篇文章主要介紹了Vue getter setter,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 解決IE11 vue +webpack 項(xiàng)目中數(shù)據(jù)更新后頁(yè)面沒(méi)有刷新的問(wèn)題

    解決IE11 vue +webpack 項(xiàng)目中數(shù)據(jù)更新后頁(yè)面沒(méi)有刷新的問(wèn)題

    今天小編就為大家分享一篇解決IE11 vue +webpack 項(xiàng)目中數(shù)據(jù)更新后頁(yè)面沒(méi)有刷新的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 淺談關(guān)于vue中scss公用的解決方案

    淺談關(guān)于vue中scss公用的解決方案

    這篇文章主要介紹了淺談關(guān)于vue中scss公用的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • vue-resource:jsonp請(qǐng)求百度搜索的接口示例

    vue-resource:jsonp請(qǐng)求百度搜索的接口示例

    今天小編就為大家分享一篇vue-resource:jsonp請(qǐng)求百度搜索的接口示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • vue通過(guò)watch對(duì)input做字?jǐn)?shù)限定的方法

    vue通過(guò)watch對(duì)input做字?jǐn)?shù)限定的方法

    本篇文章主要介紹了vue通過(guò)watch對(duì)input做字?jǐn)?shù)限定的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 如何利用vue-cli監(jiān)測(cè)webpack打包與啟動(dòng)時(shí)長(zhǎng)

    如何利用vue-cli監(jiān)測(cè)webpack打包與啟動(dòng)時(shí)長(zhǎng)

    這篇文章主要給大家介紹了關(guān)于如何利用vue-cli監(jiān)測(cè)webpack打包與啟動(dòng)時(shí)長(zhǎng)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 如何使用el-cascader組件寫下拉級(jí)聯(lián)多選及全選功能

    如何使用el-cascader組件寫下拉級(jí)聯(lián)多選及全選功能

    這篇文章主要介紹了如何使用el-cascader組件寫下拉級(jí)聯(lián)多選及全選功能,因?yàn)槭怯腥x的功能,所以不能直接使用el-cascader組件,?而是選擇使用el-select組件,?在此組件內(nèi)部使用el-cascader-panel級(jí)聯(lián)面板,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 深入學(xué)習(xí)Vue nextTick的用法及原理

    深入學(xué)習(xí)Vue nextTick的用法及原理

    這篇文章主要介紹了深入學(xué)習(xí)Vue nextTick的用法及原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • vue element-ui導(dǎo)航實(shí)現(xiàn)全屏/取消全屏功能

    vue element-ui導(dǎo)航實(shí)現(xiàn)全屏/取消全屏功能

    這篇文章主要介紹了vue element-ui導(dǎo)航實(shí)現(xiàn)全屏/取消全屏功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評(píng)論

安福县| 綦江县| 安泽县| 乡城县| 鞍山市| 琼结县| 蕲春县| 微博| 合水县| 绥江县| 天全县| 吕梁市| 北流市| 井冈山市| 南陵县| 比如县| 阿巴嘎旗| 花莲市| 象山县| 柏乡县| 孟村| 南宫市| 佛坪县| 广饶县| 湖南省| 揭东县| 大丰市| 鲁山县| 凤凰县| 玉屏| 买车| 阿坝| 资阳市| 松滋市| 肃北| 富源县| 会同县| 民县| 梁平县| 闽清县| 嵊泗县|