vue+axios中post请求时使用formData形式传参

本文介绍如何在Vue结合Axios中通过FormData形式发送POST请求。主要步骤包括:引入qs库、设置content-type为application/x-www-form-urlencoded、使用qs.stringify方法对参数进行序列化,并展示了具体的axios.post调用实例。

vue+axios中post请求时使用formData形式传参

1.引入 qs

// 引入qs
import qs from 'qs'
// 引入qs
import qs from 'qs'

2.设置content-type

//  content-type

headers: {
		'Content-Type': 'application/x-www-form-urlencoded',
}
// 设置content-type
headers: {
		'Content-Type': 'application/x-www-form-urlencoded',
}

3.将参数进行转换qs.stringify(postPara)

// qs.stringify(postPara)
let postPara = Object.assign(para,{'access_token': sessionStorage.getItem('token'),})
axios.post(common.url(url), qs.stringify(postPara), config).then(res => {
	    resolve(res);
	  }, err => {
	  	  reject(err);
	  }).catch((error) => {
		  reject(error)
	})

4.效果
在这里插入图片描述

Vue.jsAxios 结合可以方便地处理前端文件上传操作。当你需要通过 `axios.post` 发送包含文件的数据到后端服务器,通常会使用 `FormData` 对象。`FormData.append()` 方法用于向 FormData 中添加键值对,其中文件作为值。 如果你遇到文件名包含中文的情况,发送前需要正确编码文件名,避免后端接收到乱码。在JavaScript中,可以使用 `encodeURIComponent()` 函数对文件名进行编码: ```javascript let fileInput = document.querySelector('input[type="file"]'); let formData = new FormData(); let fileName = fileInput.files[0].name; fileName = encodeURIComponent(fileName); // 对文件名进行编码 formData.append('file', fileInput.files[0], fileName); ``` 然而,如果后端是Servlet,由于字符集设置的问题可能会导致乱码。你需要确保后端读取请求头中的 Content-Type,并且在解析文件名设置了正确的字符集,例如UTF-8。在Servlet中,可以这样做: ```java String contentType = request.getContentType(); if (contentType.startsWith("multipart/form-data")) { String boundary = extractBoundary(contentType); List<Part> parts = parseMultipartRequest(request.getParts(), boundary); for (Part part : parts) { if (part.getName().equals("file")) { String fileName = getFileNameFrom(part.getSubmittedFileName()); // 将编码后的文件名解码为原名 fileName = URLDecoder.decode(fileName, "UTF-8"); ... // 处理文件内容 } } } private String getFileNameFrom(String originalFilename) { int semiColonIndex = originalFilename.indexOf(';'); return semiColonIndex > -1 ? originalFilename.substring(0, semiColonIndex) : originalFilename; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值