multipart/form-data
是 HTTP 协议中用于表单数据提交的一种内容类型(Content-Type),主要用于支持文件上传和复杂表单数据的传输。与 application/x-www-form-urlencoded
不同,它通过分块(boundary分隔符)的方式组织数据,每个字段或文件作为独立的 part 传输,适合二进制数据或大文件。
一个典型的 multipart/form-data
请求如下:
POST /upload HTTP/1.1
Host: example.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="username"
John
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="avatar"; filename="photo.jpg"
Content-Type: image/jpeg
<二进制文件数据>
------WebKitFormBoundary7MA4YWxkTrZu0gW--
const formData = new FormData();
formData.append('username', 'John');
formData.append('avatar', fileInput.files[0]); // 假设是文件输入框
fetch('/upload', {
method: 'POST',
body: formData, // 自动设置 Content-Type 和 boundary
});
const express = require('express');
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });
app.post('/upload', upload.single('avatar'), (req, res) => {
console.log(req.body.username); // 文本字段
console.log(req.file); // 文件信息
res.send('Upload success');
});
from flask import Flask, request
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload():
username = request.form.get('username')
file = request.files['avatar']
file.save(f'uploads/{file.filename}')
return 'Upload success'
Content-Type
或 boundary 格式错误。Content-Type: multipart/form-data; boundary=...
,且 boundary 与实际数据一致。multer
)。FormData
的字段名,确保与后端匹配。client_max_body_size
)或分片上传。Content-Type: text/plain; charset=utf-8
等。通过合理使用 multipart/form-data
,可以高效安全地实现文件与表单数据的混合传输。
没有搜到相关的文章