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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2025-8-5 21:35:32 | 显示全部楼层 |阅读模式
<template>. _0 Q+ p( b5 W0 B
  <el-dialog
4 |& j  ~: a5 ]   title="上传"
, ~" T: [& ]% T- V% C$ d/ e   :visible.sync="dialogVisible"
2 `! l8 C4 k7 s$ W$ }* X& j   width="40%"
5 ~  K; D8 S9 n) r   :before-close="handleClose"
7 w2 G1 B! @: {# }  >
" h/ a$ ]2 U4 i/ Y0 f, m    <el-form ref="form" :model="form" size="small" label-width="80px">
+ m  `! R8 [& \1 v2 D5 |- u8 e      <el-form-item label="文件名称:">
0 s' V8 ^8 u& C8 [        <el-input v-model="form.contitle" disabled></el-input>
& R* M: Q- ?( O1 {; O/ F      </el-form-item>
2 n2 Q4 F7 U" ~; Q7 l; E/ A      <el-form-item label="文件上传:">% \/ h/ n- O* a& r. k
        <div class="uppicture">
, G3 w- Q8 j1 i/ {/ V1 I- E7 a          <input type="file" class="upinput" ref="file" @change="showimg" />
# D, a* J# c6 k( I- m          <i class="el-icon-plus" id="changes" @click="changeimg"></i>
) F3 U- W5 ]" V& W# k1 f0 i5 R' i! G          <p>上传文件图片附件</p>; v4 L6 I) m; _
        </div>
( u0 {( @) v' S        <el-button type="primary" class="uploadbutton" @click="addupload">
# j9 n( y8 [& ~! Z3 u6 s        上传附件
% G8 @9 p( C4 @! Q3 i4 [( y8 J        </el-button>
0 w) Q! b5 |! o6 ~. k9 s/ e! `      </el-form-item>8 w( I, Y  U& ?8 \  @
    </el-form>
9 |' m6 `6 \+ K  x! J, S3 S     <span slot="footer" class="dialog-footer">4 n0 s, v$ K$ b( n: d; Z; o. u
        <el-button @click="handleClose"
& I% v$ e- V) J7 O         style="background: #f7f7f7"" g+ ?3 J, ]! l8 R
         size="small">取消</el-button>
' Y/ E* o# F0 r     </span>- F/ F& k# e1 ~/ F, U# L/ ~
  </el-dialog>: o& q$ u  N5 [! R6 y* ^' Q
</template>1 ~0 D: ], A3 ]
# h0 S/ k  P7 A5 j( k
<script>: D8 s$ N' Y# q2 z
// 从API中引入uploadvideo组件
& k, \& [) V# r% @import { uploadvideo } from '@/utils/apis'
1 x  g- B: p# a3 k# @- X// 引入遮罩层组件
0 t# O* l( l& P  vimport { Loading } from 'element-ui'2 N; J5 `0 ~- p+ Q! ?  P+ c3 H6 R
export default {" Y) Y! z1 K1 V) W
  name: 'fileUpload',& D6 h+ n5 `  P7 k$ t9 V, f
  data () {
- O7 C$ l7 Y1 X+ t$ f; |" a5 O; W    return {
: n7 o' Y: M( v      form: {$ ~9 z5 j& C/ @2 Q4 P1 e, _
        // 文件名称/ g8 g  e, B) ~/ d1 ]5 h
        contitle: ''/ B& t& _, V, o! R1 S7 _/ `; k) E* c
      },
8 X! ?6 W* t' R' H( {- R0 `9 {      formdata: {}! p  s* t3 R$ g* f
    }& X& d% G4 o# Q/ S3 ^3 i3 u
  },5 s7 ?- l8 d9 A2 P- }# Y5 F8 A
  props: {
% D  b0 R; b+ a5 {' x4 ~    // 显示隐藏
" }" x. L( t) |$ r2 B" P    dialogVisible: {: O4 b, f6 p& ]) B8 f
      type: Boolean,
, e( J. p" Z7 g( e* s! u; S% S      // 必传
7 [9 I& H2 Y, g0 O. u      required: true8 Q, j+ H& F: n& I) U% }
    }7 }% b+ Z  x4 C( a0 e
  },$ K4 a# K; D. [; Z$ E
  methods: {
6 ?# w* f1 v+ E    // 关闭之前# L9 _0 @" v, [* O" i& L. Q
    handleClose () {
/ [4 v; Q7 B- t0 ^      console.log('关闭之前')
5 \5 r- |4 }' _      // .sync语法糖,单向数据流问题,0 U0 \2 T$ t- k; k9 f) `
      // 父组件传递给子组件的数据,子组件直接修改会报错,需要传递给父组件修改( c; p, L6 j6 N  B" b
      this.$emit('update:dialogVisible', false)/ {' P( @" A, l$ M! Q% Z
    },, j2 i9 ^; G6 y7 m6 T- C6 ]
    // 输入获取事件
0 Z; b9 n4 y1 L    showimg () {0 K; m0 O/ d: N$ q8 H
      const that = this4 T4 N, \& S" o; j6 u' @! b/ z
      console.log(that.$refs.file)2 @) ?+ u4 O8 J
      console.log(that.$refs.file.files[0])' G0 R6 T7 N& z
      // 文件名复制
( z9 o7 S5 N. T      that.form.contitle = that.$refs.file.files[0].name
  _/ C/ f% u7 a! m, \6 o4 h1 T2 ]      // 声明一个formdata对象( n/ m) [: w5 ?! Z; k
      this.formdata = new FormData()
4 @% d- v* A: e! Y      // 赋值需要传递的文件/ H0 {' K, H- Y. R6 y( ?; y" F3 {0 t
      this.formdata.append('multipartFile', that.$refs.file.files[0])
! t: K* A" O' U, y3 ]! `  o* V    },
3 ]3 T8 b7 N+ o    changeimg () {
- o# h( [" I. u% U. l' D6 S( {      // 点击图标时候,触发input选择文件按钮
5 z: U3 f0 A6 ]      this.$refs.file.dispatchEvent(new MouseEvent('click'))/ n7 W5 F3 h. V( N3 ?6 p
    },' x' V% l6 ?) W8 c; e  n5 }$ @0 p
    // 上传附件3 W5 C7 q0 k  D5 T% ^' e) Q
    async addupload () {/ C+ H  F$ d. c: o: ?, J
      // 上传文件提示,未选择文件提示用户
" K# j- n% s+ o, j) W+ k      if (!this.form.contitle) {2 ^4 ~' C7 U2 a. I
        return this.$message.warning('请先在左侧上传文件')! Z& P# |% l' z) _2 C
      }) z  q! A) s  R- y# ]% \7 M
      // 开启遮罩层
1 [) I7 g: T6 P6 w  ?/ m      let loadingInstance = Loading.service({9 w: e4 ?/ R5 C5 n
        lock: true, // lockde 修改符---默认是false
2 m9 A, W2 t: z4 F( G2 n# |        text: '正在上传文件,请耐心等待', // 显示在加载图标下方的加载文件4 H3 Q8 K1 ?0 h: i- D  V6 B# u
        spinner: 'el-icon-loading', // 自定义加载图标类名1 E$ L7 K; V+ p8 r0 O& H
        background: 'rgba(0, 0, 0, 0.7)', // 遮罩层的颜色8 R0 B, H" R2 ~3 K, Z* ^
        target: document.querySelector('#futureTransferDialog') // loading覆盖的dom元素节点% T- p% p. a. `+ \2 W& V' @7 T7 U
      })' ~1 y. V+ M. a; H6 P
      const res = await uploadvideo(this.formdata)8 k1 E. k: ~5 y* X
      console.log('文档服务器上传文件', res)
7 X% h4 D5 R9 B* C      // 传递文件存储id* c. D0 Q* f. y% p. v% g. a
      this.$emit('updataurl', res.data.url)* H- j! G" ~7 x# Y, Z& o
      // 回显文件名称给父组件的form 表单' L' E0 z* j4 T8 U: ^5 S# b% M# C9 P3 z
      this.$emit('updata', this.form.contitle)7 `; _: A# T: P5 ^2 |. D7 z: N
      // 清空表单
/ Q( b5 Y1 J& W4 b& h' s9 L* y; T      this.form.contitle = ''1 @/ ~! o  t  V
      this.formdata = {}
$ q' A( v6 `( h. O- j5 X      // 关闭弹框/ T5 g# J* h! x( Y1 }. @
      this.handleClose()5 `: T9 y7 h1 s+ D1 _5 h5 l4 D) _
      // 关闭遮罩层2 p- D! ]! @3 u( a9 r2 R+ W6 s2 d
      loadingInstance.close()
+ \, c% O, B7 f9 E, |. U7 u# v    }( |" y7 w0 z5 p" @/ n
  }8 J" s8 D* G* e  ?/ @2 |. W
}7 P  X/ X5 z7 q) u
</script>
: R4 ]/ u: h1 j3 g<style lang="less" scoped>
) ~( T* g' K' `1 N" f2 w& G  W( I.v-deep .el-dialog {
/ |( ?7 ^: ^" j, ]  border-radius: 10px;$ P* d- q! g$ u, p1 e
  .el-dialog__header {# O) Q" B. o2 ~$ x2 _5 e9 I- B
    border-radius: 9px 9px 0 0;
$ |) m- G, s) \9 W; Z- V    background-color: #1488c6;, V2 g) n3 }  H+ D; ~1 _
    padding: 8px 20px;
% s  P7 d- I3 j    .el-dialog__title {
( Q5 t+ F3 V" d* w0 [      color: white;
$ _2 T) N0 l: Q: y+ I6 t      font-size: 16px;' d' D8 h0 o( A0 D/ h- q
    }
- u1 L  T7 o' Z, r% K$ n' K; m, `8 ]- P' z, Z1 c, u* a& S
    .el-dialog__headerbtn {
( D  R9 a2 X- T! m      top: 12px;
% z. h! n- d. M( ]5 i      i {9 _( A5 u! m$ {5 h- x( a
        color: white;3 a$ M' U, E" c& F; q
      }" t! j6 [* z8 |: G
    }* P6 F% R  M; M% D$ g
  }6 }# t6 y! O. E/ y, @
  .el-dialog__footer {( D3 h; a3 x- r$ W+ ^# r3 P) A, E
    text-align: center;
+ `: B! M9 ~. m4 F( }  }' V$ o0 J, N6 F! @2 t  ~( q
  .el-dialog__body {
3 @& z- r* r, ^; n    padding: 12px;% L, Y" X- ^# n
  }/ i5 Q8 G$ Y3 q- N( V  L' E% m
  .uppicture {
  E& E# D2 Y' `. w2 l    width: 120px;
$ [3 k  X% L$ q; |" ^  {  m, N/ C    height: 120px;4 w. U$ e( Z: g9 _7 V4 W0 g' }
    border: 1px solid #717376;
# |6 O. _% R5 Q* n# `8 r% R& [    position: relative;
* @: h- P% [: U+ K# _' L    cursor: pointer;8 s( _9 _5 D. R
    input {
$ o7 J) w- S6 s1 b2 y      width: 100%;& q7 f) v& Q) ~. M- T7 }
      height: 100%;
) U4 N( R  q* l) p6 b% \      vertical-align: middle;
; a6 x4 }, Y# q$ K  J% d      opacity: 0;* R2 y4 J2 d" J- |
    }( J2 C% E1 {3 Q% d) n& k& A) G
    i {! ~# _; f% m% M$ |0 k4 @
      position: absolute;
6 _5 R. n5 p5 ?6 J8 v; j  ?8 @- p' ~      top: 50%;$ g- h2 b8 x( u* x6 S
      left: 50%;
; d3 ^: R% W5 R( Y$ l      transform: translate(-50%, -50%);
) `' j3 Z& u  |$ M      font-size: 30px;
5 v3 `; E# U+ U& D" C) Y      // background-color: skyblue;
! v/ ^% H/ E2 l1 j+ p% x% O    }
" U* w! o7 n) u+ m& r) ]8 g    p {0 \2 G7 h, ~# X4 h: c( B) \: {1 V
      position: absolute;
) o% V1 a# P! r      bottom: -2px;
; U. |  I  L8 |) c# W  E* s      left: 50%;7 i5 D5 ~) H0 o
      word-break: keep-all;
2 Z9 @( c% k/ J& V4 Z0 L( y      transform: translate(-50%);
2 P6 L' a, y: o$ X0 Q    }- i' k0 ^. L2 `* _- y) C
    .uploadbutton {. {) m/ j9 }* n7 t' p& ^9 w
      position: absolute;; y' [# A/ [( l9 U
      bottom: 0;$ q! N4 F& V7 x/ I5 i
      margin-left: 20px;
7 B) C' R+ A1 v* P( p2 E/ g      position: relative;& p4 c# r. H: z8 S
    }- ?7 V  M1 F1 r4 e4 W0 k2 C% N2 v) U
    &:hover {: x, R1 M3 G6 r, W$ N+ i6 Y
      color: #2da9fa;
) c& X( F) Z' A      border: 1px solid #2da9fa;% z2 o$ p0 o) U6 m
      p {
! [' p/ P( @4 k0 K, c, N5 `7 X        color: #2da9fa;+ z4 V. t- J8 g: F
      }. W/ G( B( l4 k% |# h6 [/ x
    }
7 }: ~5 B( ]! j9 B0 w  }
- E$ Q9 n# d" m6 F9 _$ Z0 t( Z, m+ X  .uploadbutton {
, o; ^$ r# b. J3 K4 p    position: absolute;) @. K/ J' ?8 u, z: Y
    top: 70%;
3 I2 q( d) w! P5 `    left: 150px;
, R7 @9 U+ j! {8 I6 Z: s# `% X  }
1 ~( V! Y# B# \! Y# I}
$ m" |  ^" x# r: ^7 f0 `5 A: X& h</style>" z1 D7 b; {( b: P' \6 l

1

主题

0

回帖

12

积分

管理员

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

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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