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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2025-8-5 21:35:32 | 显示全部楼层 |阅读模式
<template>( Z5 M; a" A5 }/ p* w) a
  <el-dialog
2 J. f* p1 }% c* }+ A9 B. G   title="上传"
& U' Q- Z& R5 S# h; J! B, Y   :visible.sync="dialogVisible"- X* l4 v" _; D' ]+ C) S
   width="40%"
0 S3 Z: Y4 L  v; @  @   :before-close="handleClose"
4 ^4 C' |3 t9 _( x" k  >2 |+ |* {; D) e
    <el-form ref="form" :model="form" size="small" label-width="80px">
5 v+ x% _5 N2 \  l! u3 J      <el-form-item label="文件名称:">9 U& k! h) A$ m2 o0 C$ l& B
        <el-input v-model="form.contitle" disabled></el-input>
% i8 X6 M+ A+ p; W* u      </el-form-item>
9 o' A) R  ~+ }3 R7 p- E0 [      <el-form-item label="文件上传:">
% Q9 t7 q$ t5 b* G        <div class="uppicture">
. t6 m2 o. [+ X          <input type="file" class="upinput" ref="file" @change="showimg" />9 g7 m; Q* R3 f8 K
          <i class="el-icon-plus" id="changes" @click="changeimg"></i>
) E- I& h; C# s. _; K2 F: ~          <p>上传文件图片附件</p>
6 E; e0 C/ q) e4 e7 l" r' x        </div>3 m( c/ ]  B5 A# ]" i
        <el-button type="primary" class="uploadbutton" @click="addupload">
9 p  K1 r8 k/ ]5 @$ d" P* H        上传附件
2 b+ \9 n7 L( ]& m9 K% g        </el-button>  E& V+ q4 B# N3 j' T6 a) @
      </el-form-item>
, c& `* {- }3 I! r) I    </el-form>
; }+ F; L' ^& u' W: V, X! r     <span slot="footer" class="dialog-footer">
3 ~8 X$ k, l  t        <el-button @click="handleClose"& E3 J- T3 ]4 ], g% v
         style="background: #f7f7f7", K: e! v; y( v! K# h- n' y
         size="small">取消</el-button>
) G& k) Q! c9 M4 Q5 t     </span># g" W2 A* M" u: I- P
  </el-dialog>
+ H2 n; M6 p& q</template>+ M9 Y$ z' X* m( J5 g

; w& F# l$ G! h9 Q# Y2 Y3 x<script>" u* W4 N2 a; ?
// 从API中引入uploadvideo组件8 Y' D1 S$ s# y2 B
import { uploadvideo } from '@/utils/apis'3 A; b: x: {/ N4 E
// 引入遮罩层组件% [" H" e' a% B. P
import { Loading } from 'element-ui'
6 x- ?) c$ n! [( C0 b) wexport default {/ e' B7 u5 g" `+ o
  name: 'fileUpload',
- Q% c: ^. d% F7 t( V4 a* v" l  data () {
: i- F9 Q. X$ k    return {5 Q. K+ G" ]6 A) _+ Y
      form: {
  l# V  N4 H8 w. \: q: w) _* w        // 文件名称
, ?1 u1 c: D  O: T/ j8 [        contitle: ''6 m1 R6 t# ~% ]& j& M, A! K
      },4 a7 Q; A% f' [" Q& {
      formdata: {}
% m" N) y' Y6 k    }
: |; {4 m% V; w5 `  },
4 d# L/ I  I, W$ J7 I6 a  props: {
6 A0 H" r; b. m+ P0 U/ `    // 显示隐藏0 @) q& Q: c8 E
    dialogVisible: {3 x: q) n, Y" g1 @% c+ L
      type: Boolean,* t" }2 d9 p( n( m7 `4 B
      // 必传# V0 _/ R( k8 W8 i: j$ q( a6 Q; `
      required: true& N7 N; P" k. i* g+ `5 ~* J
    }
( G2 e  h6 p3 l  },
3 ?# }  R. e6 t1 ?9 B" G4 c9 H  methods: {
0 y6 c! b3 B3 k% w  s7 [# c    // 关闭之前
* _; a+ e3 K) x4 ?. G$ _8 v& u    handleClose () {
2 b8 w: g+ x: u- u; y" P0 h' F      console.log('关闭之前'), f& t7 P% `: z* I5 B
      // .sync语法糖,单向数据流问题,5 i" [" E1 p! R" G6 n/ C
      // 父组件传递给子组件的数据,子组件直接修改会报错,需要传递给父组件修改
% s* z+ M4 }' P4 P- }# H      this.$emit('update:dialogVisible', false)
5 J2 B( E/ ?$ s  n& ^    },
4 |0 X" d. F! C: g    // 输入获取事件
" {- C' C$ S+ o+ l2 }8 @! ~  H    showimg () {
& h1 h& K/ q* m. g7 \      const that = this
' f6 d( I1 d" u" Y' f0 Y# e8 t/ a      console.log(that.$refs.file)
, m9 Z8 N+ {4 L) }( C' Y* x% j      console.log(that.$refs.file.files[0])
+ M; [: T; L8 M0 p      // 文件名复制
  G) g/ o9 E" v) a3 ^      that.form.contitle = that.$refs.file.files[0].name
$ k' `' i+ c7 D      // 声明一个formdata对象
$ b9 P+ `* i$ t9 H  L! _. a      this.formdata = new FormData()
# q0 k/ D& N* c, R      // 赋值需要传递的文件5 g/ T6 \1 @$ D& {; S$ @/ M/ I# z* L
      this.formdata.append('multipartFile', that.$refs.file.files[0])
) {& y9 p0 C4 \9 L; m    },: n( O* o5 v2 X; V6 x  o1 j/ p% K- \
    changeimg () {
' x; n' e' V5 I' F8 O3 C9 q      // 点击图标时候,触发input选择文件按钮$ u& D  ^& F& `0 Z2 [4 ]6 f. K. q
      this.$refs.file.dispatchEvent(new MouseEvent('click'))
* q; P7 ?" J. Z5 |/ D  H& V, Z    },
. I) t8 L0 o# [; ]1 c- ~0 k% z2 R    // 上传附件
& Y" ^, c; u1 _& S) K    async addupload () {
; L+ h) R: K6 F0 t      // 上传文件提示,未选择文件提示用户
3 o* f* Y) {) L0 C) J) D& }8 L9 Y      if (!this.form.contitle) {
$ i0 w+ m: E' C        return this.$message.warning('请先在左侧上传文件')1 |9 o- f% I' P# n3 J( S
      }8 S- Z% c$ \  `) r
      // 开启遮罩层/ r" I) }/ L8 l6 U' t# {4 u& s
      let loadingInstance = Loading.service({
1 Q& y! k9 [5 ?# H7 G5 ?/ U9 t        lock: true, // lockde 修改符---默认是false
% {) l! G; P2 D: p" E8 ?& e) R( p0 w        text: '正在上传文件,请耐心等待', // 显示在加载图标下方的加载文件5 d. B' ]$ y6 q
        spinner: 'el-icon-loading', // 自定义加载图标类名" u' p, J+ w3 v. s  G
        background: 'rgba(0, 0, 0, 0.7)', // 遮罩层的颜色, @& Q. w( L7 L# `
        target: document.querySelector('#futureTransferDialog') // loading覆盖的dom元素节点
" D0 u3 C% o- }$ s/ u      })1 _8 _+ g5 s, L' ~& O3 N/ k/ n4 }
      const res = await uploadvideo(this.formdata)
* h) U: V+ P+ B  P      console.log('文档服务器上传文件', res)
. E6 [9 ?. y% _0 r" P& r' R      // 传递文件存储id
2 B) P! G9 s/ \) Y      this.$emit('updataurl', res.data.url)
: `7 ?( C# ^) E# G/ D$ P      // 回显文件名称给父组件的form 表单
4 {8 o( L- e* i5 |9 d! m      this.$emit('updata', this.form.contitle)
5 J6 u0 E; t  n; Z6 \% n$ z0 ?      // 清空表单, B+ d% P1 V' f* E) ]$ ]( s/ l( M
      this.form.contitle = ''/ t( J7 p2 w7 i% S; q
      this.formdata = {}
, p# G+ C1 T& K: [      // 关闭弹框
9 `7 `1 _' ^4 w7 i; s5 u: J      this.handleClose()( `! X' [( k8 [1 K. @3 H
      // 关闭遮罩层
% u0 x# R$ L+ D3 y7 T      loadingInstance.close()5 o: W7 O& u. N9 k, g4 x
    }
+ k' f$ T5 {9 ~$ I- D  }! u( P9 _& j1 J
}1 S& j4 w* J5 y9 w  m' ?# J
</script>
( r/ b- Y3 N5 o+ ?, h; y<style lang="less" scoped>
- N: Y- J" A. ~1 `* {  L, q0 m.v-deep .el-dialog {
( F6 ~. ?! J# T  border-radius: 10px;: Z6 e2 j+ @% K* K6 r0 x
  .el-dialog__header {
2 R3 p7 p9 z" g' Q: h    border-radius: 9px 9px 0 0;- a  i6 e4 E+ l
    background-color: #1488c6;$ x6 m- ~/ R$ t1 ^$ g
    padding: 8px 20px;3 _9 [% ?; ?0 y% o& J$ ~2 `( b* C
    .el-dialog__title {
! H+ z9 S) h5 R5 [7 G      color: white;3 H" [' I# X6 M2 I
      font-size: 16px;8 R3 F$ i* o4 {  _- V' D. \7 q" R
    }
) F* D# o& T- w: ~" m+ K, x$ a8 }
' z* c! l) B, y" O* q+ x    .el-dialog__headerbtn {! j. A' w, K3 g" u) M6 @
      top: 12px;9 A3 E9 T7 L. K( u2 R, @7 g
      i {
7 ]0 d: l2 P& q' u4 X2 ~        color: white;
! a: h" Y* v) h8 x6 j      }, H  g, Y9 S4 A/ T. N
    }
0 M" [4 e9 L, x* K  }; o9 r8 A. q  p
  .el-dialog__footer {
) b& l. ]% R# T    text-align: center;
4 O) H6 T6 n% R  N) s6 }. `9 G  }# Q3 U) @8 q' |  @
  .el-dialog__body {
+ t8 _3 I$ M  i; u+ A; l& K$ t    padding: 12px;
; M6 |% h9 {9 [2 ~  }
0 s" Z1 u- Z0 h$ m- S( U  .uppicture {
% D) l: a9 ]' x8 B! j; s    width: 120px;
  L. q2 ~. W" B9 j    height: 120px;6 A9 k% L* q* [
    border: 1px solid #717376;6 j. f; G  n3 u& `* x
    position: relative;& k# n7 b: b- G. \1 f# q
    cursor: pointer;# Y2 }! g1 m3 a8 [+ {  b3 w
    input {
0 q% T* I+ U# A' C) y4 t+ S4 o      width: 100%;8 M2 }. E1 y8 ^' Q; I6 o) H
      height: 100%;
1 z/ I( D- R$ L) b      vertical-align: middle;
' k1 N$ W: t, }: ^& B      opacity: 0;8 l/ B/ |: N2 h- `8 m! R2 X4 `
    }0 J+ g# D4 `, Y6 ]3 H" D8 H+ \
    i {
# N. `$ @$ t; {" S9 G  X      position: absolute;$ x  a! R% g! @  a( o1 J
      top: 50%;" b) \. P/ h6 v7 |2 v/ E
      left: 50%;
: Q9 B; P9 b* o  c0 }      transform: translate(-50%, -50%);& b; j  i/ m* w) |* I' H
      font-size: 30px;
' U1 m  B' j# b2 x% w4 T      // background-color: skyblue;/ I. H+ @+ C+ v6 y7 p* z' x' \* V8 F
    }
, o8 C- G/ d' a: S7 r# c2 |6 e; R6 h    p {
' \# a; \$ }) G  P8 J      position: absolute;
0 |6 @" a& X1 |: \8 F8 O' p1 ^      bottom: -2px;( {: D' |1 y$ \1 d) M
      left: 50%;+ g; r: T* E6 R* I; F% G) d5 t
      word-break: keep-all;
3 R8 @( L9 c; V4 J& ~! P6 e/ T      transform: translate(-50%);
2 e4 x0 Z6 a4 v3 [0 H6 O) i    }! a  z- j3 m: q* n% w7 Q+ ^9 j
    .uploadbutton {6 S8 f9 w8 R7 p3 r- Y' H6 K" r
      position: absolute;
+ ^) H7 _- f9 c4 |" ?, J" }7 _      bottom: 0;- D7 e) g* N' ~! I8 K
      margin-left: 20px;& w7 K' l) t& |
      position: relative;, g( ^$ B  A. C# |* G
    }
, A: A; P8 h; f6 F    &:hover {
5 u' F% F/ G* T8 J+ n      color: #2da9fa;
- f. m8 q: d7 L9 C  L* X      border: 1px solid #2da9fa;
( b3 A$ N  s: S8 e1 Q3 e+ |' d      p {
% y+ l# v! I& W/ L        color: #2da9fa;
. c7 G7 f$ f: u) S. H0 D      }4 v% ]; E: |& U3 _* {6 a. v
    }
8 d! f$ ~/ s" q' F8 r& k  }
$ M; P8 K1 O1 T5 V+ x! H  .uploadbutton {
' b9 P5 s& f  \, w    position: absolute;- \3 L9 H8 B( t) [+ m/ Y) w; H# S3 h2 e& n
    top: 70%;- _, F9 _: D+ v9 M8 b$ D
    left: 150px;# Z6 ]( a3 X; V5 q0 ?. z: o: J8 _
  }3 F" a# V6 I" j2 s9 X- c
}8 X3 e  f' l% x' N' M
</style>
& G; M$ r# m1 {( K7 Q

1

主题

0

回帖

12

积分

管理员

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

本版积分规则

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

GMT+8, 2026-6-11 23:14 , Processed in 0.019129 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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