elementui与input[type="file"]文件上传

本文详细介绍使用ElementUI文件上传组件及input[type=file]进行文件上传的方法,包括模板配置、数据处理、预览图片及文件选择技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.elementui文件上传组件

template中

<el-upload
  :http-request="uploadFile"
  action="https://jsonplaceholder.typicode.com/posts/"
  list-type="picture-card"
  ref="upload"
  :data="formData"
  limit="4"
  accept="image/jpeg,image/gif,image/png,image/jpg"
  :on-preview="handlePictureCardPreview"
  :on-change="imageChange"
  :auto-upload="false"
  :file-list="imageList"
  :on-remove="handleRemove"
  style="width: 100%;">
    <i class="el-icon-plus"></i>
</el-upload>

// 查看图片的弹出框
<div>
   <el-dialog :visible.sync="dialogVisibleImg">
     <img width="100%" :src="dialogImageUrl" alt="">
   </el-dialog>
 </div>

data中

data () {
  return {
  	dialogImageUrl: '',
	dialogVisibleImg: false,
 	// 图片
 	imageList: [],
 	uploadForm: new FormData() // 文件形式
  }
}

methods中

uploadFile (file) {
  this.uploadForm.append('files', file.file); // 上传的文件放在files里面了
  console.log(this.uploadForm)
},
handleRemove (file, fileList) {
   _this.imageList.splice(index, 1)
},
handlePictureCardPreview (file) {
  this.dialogImageUrl = file.url;
  this.dialogVisibleImg = true;
},
// 如果是要预览已经上传的图片,那就把路径给放文件的List,比如imageList
// 加入我预览文件列表的第一张,则
this.imageList[0].url = '图片预览路径'

// 文件上传提交时要写请求头,还有其他的数据需要提交的,如下图
addNew: function (form) {
 let _this = this;
 console.log(_this.imageList, '图片文件')
 let params = {}
 _this.$refs['form'].validate((valid) => {
   if (valid) {
     params = JSON.parse(JSON.stringify(_this.formData));
	 // 设置请求头
     let config = {
       headers: {
         'Content-Type': ''
       }
     }
    _this.uploadForm = new FormData()
    _this.$refs.upload.submit(); // 把刚刚保存的文件提交一下
    // model放form表单数据,具体看后台要什么字段就改什么字段,放文件的在第一个方法里
    _this.uploadForm.append('model', JSON.stringify(params));
    _this.axios.post('tmscarfuelms/', _this.uploadForm, config).then(function (response) {
      if (response) {
        if (response.succeed === true) {
        _this.$message.success(response.message)
        } else {
          _this.$message.warning(response.message)
        }
      }
      }).catch(function () {
      _this.loadingBtn = false
    });
   }
 })
},

在里插入图片描述

2.input[type=“file”]普通文件上传

template中

<div style="border:1px solid #ccc;border-radius: 4px;">
  // 自己写了个漂亮的按钮,点这个按钮触发下面这个input框,实现选文件
  <el-button icon="el-icon-document-copy" type="primary" size="small" style="margin-left: 15px;" @click="checkFile">选择文件</el-button>
  <span>{{fileName}}</span> // 放文件名的
  <input type="file" id="fileinput" style="display: none;" @change="checkFileSure"/> // 实际上传文件的input框在这
</div>

data中

data () {
  return {
  	fileName: ''
  }
}

methods中

methods: {
  // 漂亮按钮点击事件
  checkFile () {
    document.querySelector('#fileinput').click()
  },
  // 选择的文件
  // !!!!!!!!!!!!!!!!!!!!注意。如果使用的input框。文件选择后的名字不是value值
  // 而是name值 document.querySelector('#fileinput').files[0].name
  checkFileSure (val) {
    console.log(document.querySelector('#fileinput').files[0])
    this.fileName = document.querySelector('#fileinput').files[0].name
  }
}

在这里插入图片描述
就是红框内的名字。如果你想重新赋值,那么就改它的name值
document.querySelector(’#fileinput’).files[0].name = ‘大美女.jpg’
!!!!!!!!!!!!注意!!!!!!!!!!!
普通文件上传有个隐藏的小问题,就是先选择一个文件比如:大美女.jpg
我再重新选这个文件就选不上。获者仿elementui文件上传做个删除选择图片的按钮后。点击删除,把文件删除后也选不了同样的文件。(再次选大美女.jpg)选不了。只能先随便选一个文件再选大美女.jpg才有反应。因为input[type=“file”]是change事件,文件选择没有发生改变所以无效。
解决方法:document.querySelector(’#fileinput’).value = ‘’ 即可
文件上传提交时,也有form表单或者其他也要提交的内容时:
methods中

addNew: function (form) {
 let _this = this;
 let params = {}
 _this.$refs['form'].validate((valid) => {
   if (valid) {
     params = JSON.parse(JSON.stringify(_this.formData));
	 // 设置请求头
     let config = {
       headers: {
         'Content-Type': 'multipart/form-data'
         // 'authorization': getCookie('accessToken')
       }
     }
    _this.uploadForm = new FormData()
    // model放form表单数据,具体看后台要什么字段就改什么字段,放文件的在第一个方法里
    _this.uploadForm.append('model', JSON.stringify(params)); // model放文件以外的内容
    _this.uploadForm.append('files', JSON.stringify(params)); // files放文件,同理,model和files都与后台协商好。后台说文件我要filesx那就把files改成filesx即可
    _this.axios.post('tmscarfuelms/', _this.uploadForm, config).then(function (response) {
      if (response) {
        if (response.succeed === true) {
        _this.$message.success(response.message)
        } else {
          _this.$message.warning(response.message)
        }
      }
      }).catch(function () {
      _this.loadingBtn = false
    });
   }
 })

每天进步一小步,二手房更近一步。加油!!!

### ElementUI 文件上传组件实现 Submit 提交功能 #### 自定义上传行为 为了实现文件上传并提交的功能,在 `ElementUI` 中可以利用 `el-upload` 组件的 `:http-request` 属性来自定义上传逻辑。这允许开发者完全控制文件上传的过程,而不仅仅是依赖默认的行为。 ```html <template> <div> <!-- 使用 el-button 来触发点击事件 --> <el-button type="primary" @click="handleClick">选择文件</el-button> <!-- 隐藏 input[type=file] 并通过按钮触发其 click 方法 --> <input ref="fileInput" style="display:none;" type="file" @change="handleChange"> <!-- 显示已选中的文件名 --> <p v-if="fileName">{{ fileName }}</p> <!-- 定义上传按钮 --> <el-upload class="upload-demo" :action="dummyActionUrl" :before-upload="beforeUpload" :on-success="handleSuccess" :on-error="handleError" :http-request="customHttpRequest" :show-file-list="false"> <el-button size="small" type="success">上传到服务器</el-button> </el-upload> </div> </template> ``` #### JavaScript 实现细节 在脚本部分,需要处理文件的选择、预览以及实际的上传请求: ```javascript <script> export default { data() { return { dummyActionUrl: '#', // 只是为了满足属性要求设置的一个假URL selectedFile: null, fileName: '' }; }, methods: { handleClick() { this.$refs.fileInput.click(); }, handleChange(event) { const files = event.target.files; if (files.length === 0) return; let file = files[0]; this.selectedFile = file; this.fileName = file.name; // 清除输入以便再次选择同一文件时也能触发 change 事件 this.$refs.fileInput.value = ''; }, beforeUpload(file) { console.log('Before upload:', file); return false; // 返回 false 表示阻止自动上传 }, customHttpRequest(options) { const formData = new FormData(); formData.append("userfile", options.file); axios.post('/api/upload', formData, { headers: {'Content-Type': 'multipart/form-data'} }).then(response => { console.log('Upload success:', response.data); options.onSuccess && options.onSuccess(response.data); }).catch(error => { console.error('Upload error:', error); options.onError && options.onError(error); }); } } }; </script> ``` 此代码片段展示了如何创建一个带有自定义上传方法的文件上传界面[^2]。当用户选择了文件并通过“上传到服务器”的按钮发起上传操作时,会执行 `customHttpRequest` 函数来发送 POST 请求给指定的服务端 API 接口,并附带所选文件作为表单数据的一部分[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值