element UI upload组件:data=“data”,上传文件额外参数,后台无法获取到参数问题

探讨使用ElementUI的Upload组件上传文件时,如何正确地将data参数传递到NodeJS后端。文章分析了body-parser不支持multipart/form-data格式的问题,并提供了修改后台接收数据格式的解决方案。

用element UI的upload上传组件上传文件,上传文件没有问题,但是通过data传参时,nodejs后台怎么也接收不到参数,一直显示“{}”;如下图

 

 

 仔细百度了下,发现data传参格式是

而后台

用require('body-parser')接受数据,body-parser并不支持contentType: multipart/form-data的格式类型 。

相应的解决办法就是需要更改后台接收数据的格式。

参考解决方法:

https://blog.youkuaiyun.com/liruiqing520/article/details/99709908

https://segmentfault.com/a/1190000019702689

https://segmentfault.com/q/1010000021004823/

https://www.cnblogs.com/xuzhudong/p/8487119.html

`el-upload` 是 Element UI 提供的上传组件,下面详细解析包含 `ref`、`limit`、`accept` 等属性的代码示例,并给出优化建议。 ### 代码示例 ```vue <template> <div> <el-upload ref="uploadRef" action="your_upload_url" :limit="3" accept=".jpg,.png,.gif" :on-exceed="handleExceed" :on-success="handleSuccess" :before-upload="beforeUpload" :file-list="fileList" list-type="picture-card" > <i class="el-icon-plus"></i> </el-upload> </div> </template> <script> export default { data() { return { fileList: [] }; }, methods: { handleExceed(files, fileList) { this.$message.warning(`只能上传 ${this.limit} 个文件`); }, handleSuccess(response, file, fileList) { console.log('上传成功', response); }, beforeUpload(file) { const isJPG = file.type === 'image/jpeg'; const isPNG = file.type === 'image/png'; const isGIF = file.type === 'image/gif'; const isAllowed = isJPG || isPNG || isGIF; if (!isAllowed) { this.$message.error('只能上传 JPG、PNG、GIF 格式的文件'); } return isAllowed; } } }; </script> ``` ### 代码解析 1. **`ref` 属性**:`ref="uploadRef"` 用于在 Vue 实例中引用该上传组件。通过 `this.$refs.uploadRef` 可以访问到该组件的实例,进而调用组件的方法,比如手动触发上传等。 2. **`limit` 属性**:`:limit="3"` 限制了上传文件的最大数量为 3 个。当上传文件数量超过这个限制时,会触发 `on-exceed` 事件。 3. **`accept` 属性**:`accept=".jpg,.png,.gif"` 规定了允许上传文件类型,这只允许上传 JPG、PNG、GIF 格式的文件。不过需要注意的是,`accept` 属性只是在浏览器层面做了一个简单的限制,用户仍然可以绕过这个限制选择其他类型的文件,所以还需要在 `before-upload` 钩子中进行二次校验。 4. **`on-exceed` 事件**:当上传文件数量超过 `limit` 限制时,会触发该事件。在示例中,调用 `handleExceed` 方法给出提示信息。 5. **`on-success` 事件**:文件上传成功后会触发该事件。在示例中,调用 `handleSuccess` 方法,打印上传成功的响应信息。 6. **`before-upload` 钩子**:在文件上传之前会触发该钩子,可以在这个钩子中对文件进行一些校验。在示例中,对文件类型进行了二次校验,如果文件类型不符合要求,给出错误提示并返回 `false` 阻止文件上传。 7. **`file-list` 属性**:用于绑定上传文件列表。在示例中,将文件列表绑定到 `data` 中的 `fileList` 变量。 ### 优化建议 1. **错误处理优化**:可以将错误提示信息提取到常量中,方便统一管理和修改。 ```javascript const ERROR_MESSAGES = { FILE_TYPE_NOT_ALLOWED: '只能上传 JPG、PNG、GIF 格式的文件', FILE_EXCEED_LIMIT: '只能上传 3 个文件' }; // 在 methods 中使用 handleExceed(files, fileList) { this.$message.warning(ERROR_MESSAGES.FILE_EXCEED_LIMIT); }, beforeUpload(file) { const isJPG = file.type === 'image/jpeg'; const isPNG = file.type === 'image/png'; const isGIF = file.type === 'image/gif'; const isAllowed = isJPG || isPNG || isGIF; if (!isAllowed) { this.$message.error(ERROR_MESSAGES.FILE_TYPE_NOT_ALLOWED); } return isAllowed; } ``` 2. **文件类型校验优化**:可以将文件类型校验逻辑封装成一个独立的函数,提高代码的复用性。 ```javascript function isAllowedFileType(file) { const allowedTypes = ['image/jpeg', 'image/png', 'image/gif']; return allowedTypes.includes(file.type); } // 在 beforeUpload使用 beforeUpload(file) { const isAllowed = isAllowedFileType(file); if (!isAllowed) { this.$message.error(ERROR_MESSAGES.FILE_TYPE_NOT_ALLOWED); } return isAllowed; } ``` 3. **添加加载状态**:在文件上传过程中,可以添加加载状态,给用户更好的交互体验。 ```vue <template> <div> <el-upload ref="uploadRef" action="your_upload_url" :limit="3" accept=".jpg,.png,.gif" :on-exceed="handleExceed" :on-success="handleSuccess" :before-upload="beforeUpload" :file-list="fileList" list-type="picture-card" :on-progress="handleProgress" > <i class="el-icon-plus"></i> <template #tip> <div v-if="isUploading">上传中...</div> </template> </el-upload> </div> </template> <script> export default { data() { return { fileList: [], isUploading: false }; }, methods: { handleProgress(event, file, fileList) { this.isUploading = true; }, handleSuccess(response, file, fileList) { console.log('上传成功', response); this.isUploading = false; }, // 其他方法保持不变 } }; </script> ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值