javascript - axios 不适用于新 FormData() 的发布文件数据
问题描述
我之前的文件上传代码使用 jQuery Ajax 调用。但是当我尝试使用 Axios 库完成相同的任务时,我遇到了错误。我也为此搜索解决方案,但没有找到。如果有人遇到这个问题。指导我们。我之前在 Ajax 调用中的代码:
$.ajax({
url: this.props.url,
data: formData,
cache: false,
contentType: false,
processData: false,
type: 'POST',
xhrFields: {
withCredentials: true
},
crossDomain: true,
success: function (response) {
console.log(response);
},
error: function (err) {
console.log(err);
}
});
但是在我的新项目(ReactJs 和 Axios)中,我试图用 Axios(v0,17.0) 来完成同样的任务。但我收到错误:
从源“ http://localhost:9002 ”访问“ https://example.com/ ”处的 XMLHttpRequest已被 CORS 策略阻止:访问控制不允许请求标头字段 Access-Control-Allow-Origin-预检响应中的允许标头。
错误:在 XMLHttpRequest.handleError (xhr.js:87) 的 createError (createError.js:16) 处出现网络错误
在 Axios 中的代码下面,我使用 formData() 将文件附加到 eaily。
import axios from 'axios';
let formData = new FormData();
formData.append('noteFilename', files);
axios({
method : 'POST',
url : this.props.url,
data:formData,
headers: {
'cache': false,
'Content-Type' : false,
'processData': false,
'Access-Control-Allow-Origin': '*',
'crossDomain' : true,
},
withCredentials: true,
}).then((response) => {
console.log("response", response)
}).catch(function (error) {
console.log(error);
});
解决方案
发生该错误是因为浏览器发送请求以检查是否允许从不同域的浏览器访问该 api。将标头添加到服务器以供客户端了解它可以进行调用并将获得后续 GET/POST 调用的有效响应。
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS, POST, PUT");
response.setHeader("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
您甚至可以通过Access-Control-Allow-Origin
密钥限制域
response.setHeader("Access-Control-Allow-Origin", "xyz.com");
PS:更改是在服务器端而不是客户端进行的。
推荐阅读
- java - Java中如何使用逻辑运算符
- angular - 即使所有表单字段都有效,Angular Form 也无效
- java - 如何在mysql数据库中保存选择的for循环数据?
- c# - 一个或多个实体问题的验证失败
- angular - 在我将鼠标悬停在组件上之前,角度动画不会显示更改
- corda - 如何在 Corda 帐户上的特定帐户上运行 vaultQuery?
- javascript - 想要使用每 1 秒运行一次的无限循环使用纯 javascript 更改 html 网页中的文本,但是当我加载时网页卡住了
- javascript - 优化 if/else 语句
- android - 我们可以在 AsyncHttpClient Android 中打印到服务器的确切 URL 吗?
- amazon-web-services - 根据 Cloudformation 堆栈更新/完成事件触发 lambda