【Antd】使用Upload组件基于fetch上传文件并添加额外参数

文章目录

  • 代码实现:
import {
   
    UploadOutlined } from '@ant-design/icons';
import {
   
    Button, Form, Input, Modal, Upload, message } from 'antd';
import {
   
    config } from 'ice';
import {
   
    useCallback, useState } from 'react';

const UploadFormModal = ({
    
     setFileId }) => {
   
   
  const [form] = Form.useForm();
  const [visible, setVisible] = useState(false);

  const handleOk = async () => {
   
   
    const {
   
    model_id, description, fileObj } = aw
### 网页设计中的文件上传与表单提交方法 在网页开发过程中,实现文件上传功能通常涉及前端和后端的协作。以下是几种常见的文件上传与表单提交的方法及其技术细节。 #### 1. 使用原生HTML表单提交 通过标准的HTML `<form>` 元素可以轻松实现文件上传的功能。设置 `enctype="multipart/form-data"` 属性来支持多部分编码形式的数据传输[^2]。这种情况下,浏览器会自动处理文件和其他字段的内容发送给服务器。 ```html <form method="post" action="/upload/mutipart" enctype="multipart/form-data"> <input type="file" name="photo" /> <button type="submit">Submit</button> </form> ``` 此方式简单易用,适合不依赖任何框架的小型项目。 --- #### 2. 利用jQuery Form插件进行异步文件上传 对于更复杂的场景,比如希望保持页面无刷新效果,则可以通过 jQuery 和其扩展库 `.form.js` 来完成 AJAX 风格的文件上传操作[^1]。这种方式允许开发者自定义请求头、监听进度以及捕获错误响应等高级特性。 ```javascript $('#myForm').ajaxForm({ success: function(responseText, statusText, xhr, $form) { alert('File uploaded successfully!'); }, error: function(xhr) { alert('An error occurred.'); } }); ``` 上述代码片段展示了如何绑定一个普通的 HTML 表单至该插件上,指定成功或失败后的回调逻辑。 --- #### 3. 借助纯 JavaScript 实现动态文件上传 如果不想引入额外的第三方库或者框架,也可以完全依靠现代浏览器内置的能力——即 XMLHttpRequest Level 2 或 Fetch API ——构建轻量级解决方案[^3]。下面是一个基于 Promise 的例子: ```javascript function uploadFile(fileInputId, url) { const formData = new FormData(); const fileElement = document.getElementById(fileInputId); if (fileElement.files.length === 0) return; Array.from(fileElement.files).forEach((file) => { formData.append('files', file); }); fetch(url, { method: 'POST', body: formData, }) .then(res => res.json()) .then(data => console.log(data)) .catch(err => console.error(err)); } // 调用示例 document.querySelector('#submitButton').addEventListener('click', () => { uploadFile('fileSelector', '/api/upload'); }); ``` 这里我们创建了一个通用函数用来封装文件选择器 ID 及目标 URL 参数,从而简化重复调用过程。 --- #### 4. 结合 React/Ant Design 进行组件化管理 当采用现代化前端框架如 Ant Design 构建应用界面时,推荐遵循官方文档指导的最佳实践模式[^4]。例如,在 React 中编写受控组件通过状态控制整个流程;同时利用 antd 提供的强大验证机制确保输入合法性。 ```jsx import React from 'react'; import { Form, Button } from 'antd'; class MyComponent extends React.Component { handleSubmit = e => { e.preventDefault(); // 阻止默认行为 this.props.form.validateFields(async (err, values) => { if (!err) { try { await axios.post('/server-endpoint', values); console.log('Success:', values); } catch(error){ console.error('Error during submission.', error); } } }); }; render() { const { getFieldDecorator } = this.props.form; return ( <Form onSubmit={this.handleSubmit}> {/* Other fields */} <Form.Item label="Upload File"> {getFieldDecorator('uploadedFile', {})(<input type="file"/>)} </Form.Item> <Button htmlType="submit">Submit</Button> </Form> ); } } export default Form.create()(MyComponent); ``` 注意此处需显式调用 `e.preventDefault()` 方法防止传统意义上的全页重载现象发生。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗不甘坠落的流星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值