axios如何post文件?
//html:
<input type="file" id="file" onchange="foo(event)">
//js
function foo(event) {
formdata = new FormData();
formdata.append('file',event.target.files[0]);
formdata.append('action','test');
axios({
url:'test.php',
method:'post',
data:formdata,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then((res)=>{console.log(res)})
}
//php
print_r($_POST);
test.php那边只能接收到action=test,没有file字段,请问是为什么?
我又傻逼了...php获取文件是$_FILES...
headers加不加都无所谓
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
自问自答一发...
php获取文件是$_FILES...headers里
content-type
加不加都无所谓但这里还是总结一下
content-type
吧为什么要设置Content-type
而GET请求提交的数据以"
key1=value1&key2=value2
"的格式附在URL之后,也就是在请求头中,不用设置Content-type
字段。常见Content-type
application/x-www-form-urlencoded:数据格式为"
key1=value1&key2=value2
"multipart/form-data:用于传输文件
application/json:数据格式为json格式,有的服务器语言不支持(比如PHP,需要从php://input里获得原始输入流,再json_decode成对象。)
text/plain:纯文本传输,用得少
表单提交
form表单提交时,
Content-type
由enctype
设置:如果不设置
enctype
,默认为application/x-www-form-urlencoded
目前原生form只支持
application/x-www-form-urlencoded
,multipart/form-data
和text/plain
(HTML5)。Ajax提交
Ajax的POST请求,
Content-type
默认为text/plain
,需要根据具体传输的数据,使用指定具体格式,但如果传送的是FormData格式的数据,会自动设置为
multipart/form-data
。headers: { 'Content-Type': 'multipart/form-data' }