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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2025-8-5 21:35:32 | 显示全部楼层 |阅读模式
<template>$ u/ a) ^+ G$ h4 z# g
  <el-dialog, B( w: r6 z0 W- m" ^4 C
   title="上传"8 _/ X8 J+ T8 v+ ]
   :visible.sync="dialogVisible"
0 B2 q" b/ V" h$ m, e   width="40%"
- o; f' C. p5 p+ i   :before-close="handleClose"
- ~" [3 o2 Z7 W8 |+ K$ g3 ^) w  >
- R$ [5 Q$ ?6 c( ^, _5 y    <el-form ref="form" :model="form" size="small" label-width="80px">
7 s% a9 S% X4 u5 `      <el-form-item label="文件名称:">7 _/ x/ H% O4 s! r* B
        <el-input v-model="form.contitle" disabled></el-input>9 J7 i- Q/ E7 b! n
      </el-form-item>$ D5 H3 E# A0 R2 p6 X, m. C
      <el-form-item label="文件上传:">  |) n/ v' {9 q1 F3 G# [
        <div class="uppicture">
9 y& v4 M' l5 ]/ J- g3 m2 m          <input type="file" class="upinput" ref="file" @change="showimg" />
7 v& T/ u9 P3 Q) O5 n$ V' q          <i class="el-icon-plus" id="changes" @click="changeimg"></i>
/ m3 G) g& Q# W# U, f          <p>上传文件图片附件</p>
7 v/ L3 p7 c- D8 }        </div>
; w4 p/ g% e6 c5 ^3 s        <el-button type="primary" class="uploadbutton" @click="addupload">
' I" U5 ?2 f( m: V, T        上传附件* T) b5 {% G- F( r  m3 {0 k
        </el-button>
9 f* Y. G) N; V! G6 B3 d      </el-form-item>
$ x& n5 J9 [- x3 ]/ s    </el-form>( R. b$ f3 W: I; S: q
     <span slot="footer" class="dialog-footer">  l' Y( |/ t2 q1 A+ |6 V4 E
        <el-button @click="handleClose"* ~" K: M, y) `* i$ R
         style="background: #f7f7f7"2 x) r3 _) R1 M' e
         size="small">取消</el-button>
" ~; V1 V& T  m, `# \0 T! L     </span>$ i( U* C) l) a) ~8 |+ N
  </el-dialog>7 E' E* r8 ^' S0 a/ B% ]
</template>
, C0 J; W# g& O% \" s
8 {, a& G. ]( h$ Q: z; q' Z<script>
0 a  ~: \4 J6 n5 p- R6 y6 n// 从API中引入uploadvideo组件0 F- U' b4 v/ t
import { uploadvideo } from '@/utils/apis') i+ [; h& X! D9 i+ {& w
// 引入遮罩层组件
) C0 y' k& {1 Iimport { Loading } from 'element-ui'' B& P4 t% R" L+ P" ]0 |/ k
export default {
# {, g2 |+ T2 A( x, D  G) E0 {  name: 'fileUpload',
: u' @3 y# [2 H( p+ g# e  }& g2 @  data () {4 e" _& G2 W8 c# w
    return {
# H, Q) ~" K: x! m# {* Z      form: {
' }4 _" i) l) V        // 文件名称4 a8 [: n8 ^- R7 v
        contitle: '') K$ n( ?7 z  @/ x+ f
      },0 D5 I9 ]( f7 x9 j5 V
      formdata: {}( n) A3 x& c6 [5 {& A4 Y
    }
% p! H/ E$ ~1 C" F  },9 _5 f0 L, _/ F4 o& \! y- O
  props: {
% f" `* S7 J. W5 s8 ^  ^! A4 U% {    // 显示隐藏. w4 |0 ]8 Z5 R
    dialogVisible: {2 K4 u" F) v7 g. Z
      type: Boolean,5 s4 e6 @+ n( H
      // 必传1 N0 b. B8 f7 c7 n
      required: true
. V! j4 n1 i# @$ x    }
" k6 f' n0 Z0 D! |( T2 M9 Y  },/ l4 Z8 a2 Q% }1 y. L. Z% G
  methods: {) T; d: d* p6 I( p
    // 关闭之前( z7 Z5 [/ e0 t+ X
    handleClose () {
( E  ^) @3 S: C5 y: k      console.log('关闭之前')
5 f9 _! g5 ~7 t% Z0 f0 d      // .sync语法糖,单向数据流问题,
. p$ b7 M  @* T8 i0 e3 x0 J% t      // 父组件传递给子组件的数据,子组件直接修改会报错,需要传递给父组件修改
9 m; G6 v- N+ N3 U) z8 T) d      this.$emit('update:dialogVisible', false)
8 ]3 ^, r4 F3 R# E+ i" a    },
7 J% A+ |6 z2 D: U, \$ ?* h    // 输入获取事件
# Q/ e) l' v: v2 [: i: y: ]9 N    showimg () {, G2 w6 X) N, U. Q5 F: L
      const that = this
  T  {. f- N: P      console.log(that.$refs.file)
, L% T4 L3 A! `2 L      console.log(that.$refs.file.files[0])
2 T3 c4 G' M/ ~  x! L  a& i0 Z      // 文件名复制" e$ w0 Z7 W" K( I+ x# `* I4 W% P/ e
      that.form.contitle = that.$refs.file.files[0].name; k7 E8 O; _. i" \
      // 声明一个formdata对象
* C) x) b. [  M      this.formdata = new FormData()/ T. G+ l9 y& w+ R4 U8 K! g2 v
      // 赋值需要传递的文件
3 C/ b2 U7 A/ k1 t      this.formdata.append('multipartFile', that.$refs.file.files[0])1 x: S6 ?) O. \
    },
% `7 F3 E% r4 z8 H3 I$ U( ~4 c1 j( C    changeimg () {
0 Z+ h& j7 e( N$ h3 H      // 点击图标时候,触发input选择文件按钮
) ^- |0 f1 J1 I4 p/ q; s      this.$refs.file.dispatchEvent(new MouseEvent('click'))" t- B( T* d) [, z' Z4 m
    },
9 h4 P* D' `( F    // 上传附件
3 O- f1 l3 {  j- P. l) f# a' k    async addupload () {0 u4 H- Z/ Q8 O* e
      // 上传文件提示,未选择文件提示用户
1 ^% y  b' b" [3 a5 K- a      if (!this.form.contitle) {, m- z4 u9 q8 C4 j) z) E
        return this.$message.warning('请先在左侧上传文件')$ C/ I0 a/ Y; D! t
      }
+ x9 J$ `' Y2 j1 `6 |- p2 ~      // 开启遮罩层' q% L. x2 q6 A3 q8 b
      let loadingInstance = Loading.service({
1 R9 {6 p+ k$ K5 H! U( ^        lock: true, // lockde 修改符---默认是false
5 f. N5 M3 q0 P" @9 K- X        text: '正在上传文件,请耐心等待', // 显示在加载图标下方的加载文件& H, h, |/ t/ J% I
        spinner: 'el-icon-loading', // 自定义加载图标类名) ^" |- z8 i) K/ s6 q
        background: 'rgba(0, 0, 0, 0.7)', // 遮罩层的颜色
8 z. L2 a" k/ S4 K8 f        target: document.querySelector('#futureTransferDialog') // loading覆盖的dom元素节点
) [& D2 Q" B) H2 S) ]# }2 g$ G- _; Y      })
2 X3 U, C- X2 D  b; a9 D7 Y+ J      const res = await uploadvideo(this.formdata)' K* f: L7 ~& M
      console.log('文档服务器上传文件', res)1 O4 V! ]9 i2 e' c. x& x3 b
      // 传递文件存储id0 l; M. Y/ \. i
      this.$emit('updataurl', res.data.url)" m# _9 I2 G7 j& u8 |
      // 回显文件名称给父组件的form 表单
- T/ s4 _# r7 P. k      this.$emit('updata', this.form.contitle)
) ]2 e, j# B, t: `$ j+ W# Y      // 清空表单
; H9 X3 }3 j  @5 L  G      this.form.contitle = ''
1 X5 b, t$ c1 G, o7 R1 ]4 H  M      this.formdata = {}
9 Z8 N% Z1 q4 b9 l" M5 l      // 关闭弹框
  n% x5 m) N  j) w      this.handleClose()
+ {( k5 w, {" f' Z+ {2 F      // 关闭遮罩层. J$ ^2 ]8 z6 \: f6 K: f4 o
      loadingInstance.close()% Z0 l# s# z# ^; w
    }
, Z. @/ P; W1 ~  }! y7 a. S5 S# t" l
}
  l' F/ H" w7 e) |- q$ ~3 U</script>
) u. O9 ?- v  w% @, }& C<style lang="less" scoped>
) z7 {, v" f1 Z' K) @0 X.v-deep .el-dialog {
% {$ i' [" s; M6 f/ k) a  border-radius: 10px;$ m3 J0 v: x2 a+ F
  .el-dialog__header {
7 s- K# ^9 N1 @( d5 y/ Z! Y    border-radius: 9px 9px 0 0;5 h. j5 g; E( r0 A
    background-color: #1488c6;1 M1 n3 d9 m( h# m/ V1 P/ c
    padding: 8px 20px;! B8 X/ I' p- ?5 D
    .el-dialog__title {
( a; |- S$ i- A      color: white;
. e$ T! B/ q0 f/ R      font-size: 16px;, n" J# l0 b/ i, V2 S
    }
5 A" Q! Y: z6 A9 y- M
$ k5 h' W4 a; t  H9 x% R    .el-dialog__headerbtn {
. Y* z* ?; o( w/ f      top: 12px;
1 ]3 |6 X+ b4 \+ M. R      i {7 _9 z( A5 O5 `" L
        color: white;, c# t* U3 J, r# E4 ~8 ]1 R# u: Q, D
      }
4 w- e( C" v/ G9 r+ A    }+ Q/ @: |/ O* L5 l6 K
  }2 }, u; C) ?, H" q! M- v
  .el-dialog__footer {
) T8 j3 b  K6 o& y0 G    text-align: center;
, h5 E+ p9 p- S  }
4 R2 ~8 g! l- J" u, V  .el-dialog__body {
7 y, U3 K% g  S+ v, B! ^6 v    padding: 12px;) [9 k  K: S  M  r
  }) b2 M7 P8 U. R( w
  .uppicture {
" U2 N# A% M( G" |; y    width: 120px;6 G) M2 V  S3 Q2 v  v4 l) i
    height: 120px;$ g) }" d( y, H6 j  ?) h
    border: 1px solid #717376;
/ o# V( C9 @& I, D' q3 ]2 U1 {    position: relative;& T* D  u' r# }
    cursor: pointer;5 k) ^/ ^$ V& d( X, Q7 A0 Y+ j
    input {' z" e( d0 E/ L1 Q% l
      width: 100%;
7 [* Q2 X; `0 ]- \& E4 i+ l0 G& i7 s      height: 100%;
& j6 R8 V; A  ?/ U      vertical-align: middle;
/ x( O" v! Y( D* |6 r6 J* ~! e      opacity: 0;
% P  _+ r2 C1 K/ k    }
% [1 G2 i3 i% c" @    i {
+ k& U, E5 k" X- N0 `. e      position: absolute;. |$ ^( C+ x! a' z, S' Y5 \/ d
      top: 50%;
4 a9 Z6 D  Z" g" X( a- o5 j6 t      left: 50%;# o0 G8 k, X8 G; `" N/ D
      transform: translate(-50%, -50%);
0 x  I, u) l, c      font-size: 30px;
3 p6 Z  l9 C$ w) ~; f      // background-color: skyblue;
5 a+ C* `0 _* H6 F/ b0 T/ i$ s    }4 a, s  `+ C2 o8 Q4 ]+ ?! Z
    p {6 v4 A$ P2 r3 f4 p: I, O7 ^
      position: absolute;
0 P3 U7 J  U5 B- B, O" p) z      bottom: -2px;  m7 M+ A# l5 G  @" M) V6 ^
      left: 50%;
7 }8 ~0 A, t' [5 P. L0 ~      word-break: keep-all;# m( r6 {" G, Z" R
      transform: translate(-50%);' {5 }7 c1 Q1 Q$ ]/ W4 A
    }0 g2 W6 g: R' j( A3 U! z
    .uploadbutton {! r# \5 C; {- V! j
      position: absolute;
. J3 Q' ^+ G: s  u" _      bottom: 0;: ^& t3 L! I% D6 b" O9 K
      margin-left: 20px;* `. H6 q* k: c7 K4 Q' z
      position: relative;
! p6 D8 x: |/ k3 t    }
7 K0 e* {  ^; T    &:hover {
5 P  J; f# P1 ]; ]# u6 J* ?! G& q      color: #2da9fa;
3 @( J: K6 ?0 G; z$ G% e      border: 1px solid #2da9fa;
  L; y* h6 z+ O4 q4 T      p {
' N6 Z3 q4 o4 M5 M        color: #2da9fa;( y0 }) |8 b, b4 x4 U. |4 t
      }5 ?2 o1 _. z5 Y9 ~
    }+ N% v$ i3 J* g3 }
  }
6 W- M( g( O4 C* l  .uploadbutton {( ^( d/ M- }3 v3 \
    position: absolute;& I$ V9 f( f' w" v
    top: 70%;: d, n3 w! L2 A
    left: 150px;- |( z, y1 J1 P5 v; C0 q7 A
  }# k' b8 D0 C- h) G: X
}( t+ A" L* U  B9 ]
</style>
1 L2 ]( R9 @* h! Y' \: N

1

主题

0

回帖

12

积分

管理员

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

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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