找回密码
 注册
查看: 186|回复: 1

vue文件上传编写错误未成功的代码

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2025-8-5 21:35:32 | 显示全部楼层 |阅读模式
<template>
5 b1 r  q' x  k2 b* ~  <el-dialog
; r7 L+ S( M# X   title="上传"' K/ r" t  X- w8 Z% [4 t
   :visible.sync="dialogVisible"
7 b  r8 ?: q# @8 r   width="40%"9 [3 {! l/ r) g5 k& s6 b; }+ P
   :before-close="handleClose"
5 H( J' f( ]/ i7 Z, d  >( W0 L) n  \) z' J8 m2 g. t
    <el-form ref="form" :model="form" size="small" label-width="80px">8 k8 I* G, K8 M  N& [9 o
      <el-form-item label="文件名称:">
+ u" L" X  R$ S" ]        <el-input v-model="form.contitle" disabled></el-input>2 h# E  p1 C- W
      </el-form-item>
& Z! t2 ~" q7 }" p9 a2 F- Q      <el-form-item label="文件上传:">
# D! Q4 r* G' j: ~        <div class="uppicture">
+ ^: Z; s2 V* I7 R  G( o4 O          <input type="file" class="upinput" ref="file" @change="showimg" />
# x* n1 @) v% N$ V' _) m3 _  A6 L+ C          <i class="el-icon-plus" id="changes" @click="changeimg"></i>
+ w; A* x2 N" T2 r# C* ?$ r- v          <p>上传文件图片附件</p>
2 B1 C3 G) V$ V8 n- x) c& P+ \        </div>. F6 K/ Y/ Q7 n& `" j/ S" D" m) }2 m3 F
        <el-button type="primary" class="uploadbutton" @click="addupload">
/ B3 c0 ~. ^0 k. [( v        上传附件  Q2 s4 u  m* T) S  {) q# I
        </el-button>
5 o+ l* s* j7 g' I2 w3 E      </el-form-item>
. u: m* S% m) d& b. F$ ~    </el-form>
( f6 @! h' Y0 {2 d: U/ d1 V0 d: U7 e     <span slot="footer" class="dialog-footer">$ \4 \& p, E* \: z* C+ m& O
        <el-button @click="handleClose"$ t& v- z. N& [: `" h  z8 K
         style="background: #f7f7f7"
8 ~  Z1 X2 D( x4 i; V         size="small">取消</el-button>* K! S& u) z5 b# Y5 c
     </span>
) s/ h6 n+ `- J9 H  </el-dialog>
- v% e; ~7 R9 z8 Z' E+ I0 }3 P</template>
: k) n- r6 q* ~! A( {/ j5 |% J
* @6 B3 e# {' v. ?& X<script>8 ~! z8 u2 U3 }
// 从API中引入uploadvideo组件, a! J4 I1 o. L
import { uploadvideo } from '@/utils/apis'; ^, r+ D( x+ O. {6 B
// 引入遮罩层组件
9 e6 f( E9 M5 m: E# _$ B& h8 S3 uimport { Loading } from 'element-ui'
+ ]& _7 @, ?5 s8 O0 _- hexport default {5 G' p( e7 x6 Z" y1 J
  name: 'fileUpload',$ G7 v: g+ w" S- ?" G* w% j
  data () {
9 D/ A" }& y' ]0 w( ]    return {
/ X) ?+ w9 j7 K4 T$ L. G      form: {% g9 @4 S! g: Q; q* u' r
        // 文件名称# E0 _6 F% L& n
        contitle: ''5 E2 t& S8 N1 x. N
      },% j, s7 i- t: x8 Z- e
      formdata: {}
. e0 a0 t# {% k4 i2 Z    }
* A, t6 a5 M3 {6 G8 H6 M  },
4 D" t% L  G. `) b9 \  props: {
5 G" [- M3 F) B$ A; F    // 显示隐藏
+ t1 l- K. K& V0 x% ]' V4 y    dialogVisible: {( {' a+ R, t! }
      type: Boolean,
$ G5 E5 q0 g/ A+ W" w' B% _( Z2 J      // 必传" a  y' a( V' Q1 M' P" [
      required: true
; h& c8 Z% v' k+ q6 S* o' n! d    }
- O; o4 h% n2 ~9 j2 B. q  },/ h/ n7 r+ |  ^9 O( l' X( U, ?
  methods: {
0 d% h/ k1 ^' u    // 关闭之前) M. i% V6 U/ f; [
    handleClose () {8 B& O- v+ D. M) t: u6 R3 x4 |
      console.log('关闭之前')
  H' Z+ X# |( S      // .sync语法糖,单向数据流问题,
  \+ @; B; A6 y) E9 }3 a      // 父组件传递给子组件的数据,子组件直接修改会报错,需要传递给父组件修改
2 B5 M; ?  E% x4 {& B+ Q: X3 X      this.$emit('update:dialogVisible', false)  S# j" [5 @/ {& h+ c  z% ]% x! q) u
    },* i+ h6 D: R+ P, A
    // 输入获取事件7 V9 B) j! ~2 H7 W
    showimg () {
1 d* ]* Y$ J4 w# k      const that = this; o) Q5 \* F* ^
      console.log(that.$refs.file)
; J7 d* B- t) t3 H; }      console.log(that.$refs.file.files[0])
$ F2 O3 Q. l$ X: w7 j      // 文件名复制
# ?1 W9 t, @  [; E  Z      that.form.contitle = that.$refs.file.files[0].name
9 L9 E( z, [/ Y& m6 B+ X, u      // 声明一个formdata对象
5 e$ Z! J6 l3 B* z) u& Y      this.formdata = new FormData()8 J- F' H' R, P) H  J  U$ y
      // 赋值需要传递的文件
+ V  @1 i" ~4 c. }, }, ?5 [      this.formdata.append('multipartFile', that.$refs.file.files[0]): S/ _* A+ n' l3 x$ {: V  V
    },
% J2 B) e/ G- f2 u9 }8 r* }1 N% o    changeimg () {
: h: D2 P6 g4 n# E- ?6 l      // 点击图标时候,触发input选择文件按钮
4 b9 ~5 w4 ]/ A* a8 d$ Y      this.$refs.file.dispatchEvent(new MouseEvent('click'))$ u5 ^3 B) J9 v) F1 Q/ d' j8 G9 p
    },
+ D  |* I7 g+ e3 c* {    // 上传附件
8 B- P2 C5 O  k5 w. B2 \4 `7 C    async addupload () {1 k) f3 X5 m3 v! a
      // 上传文件提示,未选择文件提示用户. O* {! m$ D1 o2 K0 w; y% M
      if (!this.form.contitle) {
4 ]9 M7 C1 p1 [        return this.$message.warning('请先在左侧上传文件')* A4 r+ ^5 S& ^' }5 S1 O* X
      }4 D6 o, H9 X9 y, Q' [
      // 开启遮罩层( v# |$ ~2 t7 P) o
      let loadingInstance = Loading.service({2 p4 s7 I7 \5 n- n+ ^& x, _
        lock: true, // lockde 修改符---默认是false9 Q+ D$ k+ v& ]4 W. o
        text: '正在上传文件,请耐心等待', // 显示在加载图标下方的加载文件& X/ O, ^) X. i" ?1 T+ k
        spinner: 'el-icon-loading', // 自定义加载图标类名5 X7 a1 ~6 ?1 U2 g
        background: 'rgba(0, 0, 0, 0.7)', // 遮罩层的颜色
8 m) f% z# \  l3 U( N& P0 o        target: document.querySelector('#futureTransferDialog') // loading覆盖的dom元素节点
" r3 ^) w! z0 n& ~! a& ^9 @) F      })
0 i1 v" n, m! S& i4 |      const res = await uploadvideo(this.formdata)7 O8 {$ F' O( A& _: V
      console.log('文档服务器上传文件', res)3 x+ k( i3 R' u# N  \- ?6 u1 q+ Q
      // 传递文件存储id
$ h& Q, Q- [! c7 R  d5 ?      this.$emit('updataurl', res.data.url)5 d/ i' O- U5 T' Q/ g/ O- Y1 C5 {
      // 回显文件名称给父组件的form 表单5 \6 E6 ~: J* ^; K
      this.$emit('updata', this.form.contitle)) F7 T* Q; l. u0 t; {
      // 清空表单
& ~3 F$ s1 n# N7 [      this.form.contitle = ''
( W& L0 C/ j+ l8 M6 _, O$ J      this.formdata = {}
5 n. r: M& G4 x, D! S& S      // 关闭弹框# ~) D! X( O6 H+ ]$ e/ }( }( G) ~
      this.handleClose(): K# i# L% Z* L; V8 f1 Z) A
      // 关闭遮罩层$ L/ o6 Y0 L& Z7 m
      loadingInstance.close()- r4 D7 x+ z7 W/ t4 I8 r; s! O# R
    }  n- t7 `7 D7 ?% v5 ?
  }
, y1 }6 {5 w7 K- E  ~& M- A# [2 T}
* c9 ~9 p: T( U</script>4 u7 T* f( z6 {& y- O
<style lang="less" scoped>, \8 c! v$ _9 |, b
.v-deep .el-dialog {7 \1 n5 {4 b; D" E" L- ^
  border-radius: 10px;) E! G( o# K) s4 \9 r4 [
  .el-dialog__header {/ q; M! B7 n5 u
    border-radius: 9px 9px 0 0;
6 x7 t5 }  u2 ~. y+ Q9 R" ~    background-color: #1488c6;
9 M- v0 M1 y+ ?3 V    padding: 8px 20px;5 I# b$ b5 Z# ~# p* @/ ]0 Y
    .el-dialog__title {
0 t% s1 Y& r4 _, L" }      color: white;; p6 j6 I* ?* U7 W* {! |
      font-size: 16px;
( p0 ?* x6 o) ^/ R  n6 \3 J) \2 V    }$ c( P: u! g8 E, k

" }6 A$ X, I' W& y6 ?$ d    .el-dialog__headerbtn {/ _8 ^9 u, Z: b# J( W2 x# V
      top: 12px;9 P( S5 l- K: Q( ]2 s6 A
      i {
1 u6 |% z1 H' {        color: white;
* f& J7 v1 T0 ~' ?& ^/ }  M- B3 a2 F$ u      }
2 L" `$ s* J$ r8 ~, h/ ~    }( P0 j. K/ z& R8 w
  }
( h: I9 x, ]2 Y$ |1 S  .el-dialog__footer {9 U, L. v! o* @
    text-align: center;
% W+ a3 T% M: [. ~7 b. t  }8 X) T: `% e, m0 j
  .el-dialog__body {7 @  m; F& Q4 A/ I
    padding: 12px;4 Z3 o: b& ~0 ]6 A. D
  }
1 |, e% r& t" H4 c; k& O  .uppicture {4 l& f4 V% i( ]! g) r6 H  @5 t
    width: 120px;1 ?; i3 N1 ?6 B2 Z1 P
    height: 120px;
* k$ C( R, I( f$ l    border: 1px solid #717376;
9 n; p# o- `' z7 {. F, ^' h# [    position: relative;
4 B( Q3 ~6 [/ Y8 {7 l* k    cursor: pointer;* `7 e8 ^! D, o
    input {% t2 M4 {1 A1 @( v  V' s3 ~2 }2 U
      width: 100%;
& v% R# J" M1 ]      height: 100%;9 Y- J( Z  J" p0 k7 }
      vertical-align: middle;! y5 C" Q" n8 U8 D6 ]4 q9 G# O
      opacity: 0;, L! l. R0 F! S) c" s
    }
  E  R3 v( z5 c: A' o. j" H8 j    i {
; t! S6 l1 a6 e. l( i# ^* Q      position: absolute;& n/ q* ]8 c6 b5 _; C6 f
      top: 50%;( b9 i% h4 p, U! k  n
      left: 50%;4 W; D8 n2 H  F! B
      transform: translate(-50%, -50%);7 }5 u  k1 s9 |$ i8 G
      font-size: 30px;
: \. r: y! d' [' @6 p' r      // background-color: skyblue;
) W/ T: v! b) R( l$ _    }
& R: M9 K) k. W9 W  a- v    p {
, i0 J- G/ M8 D  P) v* h( R7 c      position: absolute;
7 D4 b" J1 f* t0 J4 ^+ d0 {      bottom: -2px;( C/ H9 h+ a# d9 u
      left: 50%;0 J+ W% X+ `, N& N
      word-break: keep-all;
0 ?- G1 b: y# x' d& l      transform: translate(-50%);
. O' g& O1 u5 a# U4 ?! ?    }/ C2 J7 h) F! r4 g/ l9 V
    .uploadbutton {
: ^' [( M  j7 w4 L$ j; N      position: absolute;- E' l0 x. D6 f; F& V& _! T$ x
      bottom: 0;
6 m: S/ G* j2 l' f      margin-left: 20px;
% H3 l- o! P4 Y6 A; d' E      position: relative;3 c4 R6 l' X  O7 S4 Z" w
    }9 e( Q% ]: J' M6 r
    &:hover {/ ^8 F% R2 B/ f1 g) t+ a6 i
      color: #2da9fa;, }9 d. W2 H8 m& D/ {6 ^% A! J
      border: 1px solid #2da9fa;6 v4 Q- d) e, Q8 y9 K
      p {
4 _6 S3 {: O# p/ Q% V% ?        color: #2da9fa;
/ L; B& k1 c2 F$ n: S      }8 l, b0 s4 E3 \% `/ ^
    }
+ D4 U/ a( P$ V: z  }* d* Q' \* K# a7 c
  .uploadbutton {
& T8 {( W& Y, x: \/ j/ U& D    position: absolute;
+ N6 {, s% ]# J    top: 70%;
! ?6 C5 k& f! t% @& i% {1 f    left: 150px;( s. v8 G' E8 u$ }( M/ j; ]4 O7 J
  }
! N7 Y% p$ E0 ?0 W, R0 ]}8 ~" w% G( Z8 G1 H. u
</style>: Y+ h; ]% n. P- F( `. {

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-8-5 21:35:50 | 显示全部楼层
未成功的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:23 , Processed in 0.017113 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表