原生JS实现文件上传:原理、代码与常见问题解析

作者:代码拾荒

时间:2026-10-25

浏览:164

本文详解如何使用原生JavaScript实现文件上传功能。通过隐藏原生input标签并绑定按钮点击事件触发选择,利用FormData对象同时传递文件与其他业务参数。文章涵盖前端文件大小校验、后端Spring Boot处理以及Nginx上传限制配置,并解析axios请求头与拦截器的关键设置,解决常见上传问题。

文章目录

本文分享了一段使用JavaScript实现文件上传功能的完整代码示例,供读者参考学习。

一、目的:

实现图片上传功能。

二、效果:

一、目的:

三、思路:

利用input标签自带的文件上传特性,将其样式隐藏。随后为上传按钮绑定点击事件,在事件中触发隐藏input的点击行为,从而唤起文件选择对话框。

四、代码:

//html
<input ref="img-upload-input" class="img-upload-input" type="file" accept=".png, .jpg" @change="submitUpload">
<el-button style="margin-top: 20px" type="primary" @click="handleSelectedImg">选择图片</el-button>
//js
//点击上传按钮
handleSelectedImg() {
 this.$refs['img-upload-input'].click()
},
 //选好图片之后点击打开按钮
submitUpload(e) {
  const files = e.target.files
  const rawFile = files[0] // only use files[0]
  if (!rawFile) return
  this.upload(rawFile)
},
 //上传
upload(rawFile) {
   this.$refs['img-upload-input'].value = null // fix can't select the same excel
   if (!this.beforeUpload) {
     return
   }
   //检查文件是否满足条件
   const before = this.beforeUpload(rawFile)
   if (before) {
   //上传事件
     this.uploadSectionFile(this.uploadParams, rawFile)
   }
},
beforeUpload(file) {
   const isLt1M = file.size / 1024 / 1024 < 50

   if (isLt1M) {
     return true
   }
   console.log('上传文件不超过50M', 'warning')
   return false
},
uploadSectionFile(params, file) {
   let data = params
   let fd = new FormData()// FormData 对象
   let fileObj = file// 相当于input里取得的files
   fd.append('stationID', data.stationID)
   fd.append('date', data.date)
   fd.append('file', fileObj)// 文件对象
   supplementFile(fd).then(res => {
     //调用上传接口
   })
}

五、注意事项

封装的请求头设置为(后续发现该配置并非必须):

'Content-Type': 'multipart/form-data;'

在axios的请求拦截器中,直接return转换后的数据即可。

transformRequest: [function(data) {
    // 对 data 进行任意转换处理
    return data
  }],

六、常见问题

1. 上传文件的同时需要传递其他参数怎么办?

可以将其他参数与文件对象合并到一个FormData对象中进行传递。

let fd = new FormData()
fd.append('file', file)//文件
fd.append('param1', param)

2. 文件大小的限制问题

1)前端限制:在上传文件时,限制可选文件的大小。2)后端限制:在Spring Boot后端进行文件大小限制。3)Nginx配置:如果前端发送请求但后端无法接收,需检查Nginx的配置。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章