axios post formData ,文件 上传,formData.append,文件名称有中文,后台servlet读取乱码,
时间: 2024-10-14 16:13:32 浏览: 47
当你使用axios库进行POST请求,并附带FormData来上传文件,尤其是当文件名包含中文字符时,可能会遇到后台接收数据时中文乱码的问题。这是因为浏览器发送的数据默认采用的是ISO-8859-1编码,而Servlet默认解析为UTF-8。解决这个问题通常需要做两步:
1. **设置axios头**:在发送请求前,你需要设置`Content-Type`头部为`multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW`,以及添加`charset=utf-8`部分,例如:
```javascript
axios.post(url, formData, {
headers: {
'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'keep-alive',
'Charset': 'utf-8'
}
})
```
2. **处理文件名**:如果你直接将中文文件名作为键(key)append到formData中,服务器可能会将其编码错误。你可以创建一个新的File对象,设置其name属性为正确的UTF-8编码的中文名字:
```javascript
const file = new File([fileData], `文件名${encodeURIComponent('中文名')}`);
formData.append('file', file);
```
3. **后台处理**:确保你的Java Servlet能正确识别并解码接收到的文件名。在读取请求体时,可以尝试使用`String decodeString = new String(request.getParameter("file").getBytes("iso-8859-1"), "utf-8");`。
阅读全文