我向拒绝内容长度超过特定限制的请求的服务器发布(包括文件)。我想在执行注定要被拒绝的请求之前验证我的JavaScript客户端(浏览器)中的内容长度。如何获取 () 编码对象的内容长度?FormDatamultipart/form-dataFormData
const formData = new FormData();
formData.append('text', text);
formData.append('file', file);
if (getContentLength(formData) > limit) {
alert('Content length limit is exceeded');
} else {
fetch(url, { method: 'POST', body: formData });
}
编辑:感谢您的回答,@Indgalante。仅使用字符串和文件并不能计算正确的内容长度。lengthsize
function getContentLength(formData) {
const formDataEntries = [...formData.entries()]
const contentLength = formDataEntries.reduce((acc, [key, value]) => {
if (typeof value === 'string') return acc + value.length
if (typeof value === 'object') return acc + value.size
return acc
}, 0)
return contentLength
}
const formData = new FormData();
formData.append('text', 'foo');
alert(`calculated content-length is ${getContentLength(formData)}`);
fetch('https://httpbin.org/post', { method: 'POST', body: formData });
您不认为表单数据已在请求中编码。因此,添加了 i.a. 边界。示例中计算的内容长度为 3,但在我的 Chrome 浏览器中应为 138
和 172 在我的火狐浏览器.我不确定其他浏览器的行为方式。
饮歌长啸
泛舟湖上清波郎朗
阿波罗的战车
相关分类