我有一个用例,我需要通过AWS API Gateway使用AngularJS应用程序将CSV文件上传到我的后端应用程序(在Elastic Beanstalk-Django Python REST App中运行)。
我已经通过POST方法使用/ main_resource / upload_csv之类的资源创建了API网关。
[当前,我正在使用示例Javascript应用程序对此进行测试,该应用程序对API网关URL进行AJAX调用。下面是AJAX调用
$.ajax({
method: 'POST',
url: 'https://47483nvh39.execute-api.ap-south-1.amazonaws.com/mystage/main_resource/upload_csv',
headers: {
Authorization: authToken,
"Accept": "*/*",
"Content-Type": "multipart/form-data"
},
contentType: 'multipart/form-data',
data: formData,
dataType: "json",
processData: false,
success: completeRequest,
error: function ajaxError(jqXHR, textStatus, errorThrown) {
console.error('Error: ', textStatus, ', Details: ', errorThrown);
console.error('Response: ', jqXHR.responseText);
console.log("Status: " + jqXHR.status);
if (jqXHR.status == 401 || jqXHR.status == 403) {
//redirectToLogin();
} else {
alert('An error occured:\n' + jqXHR.responseText);
}
}
});
重要设置在API网关资源POST方法中完成
完成所有这些设置后,我得到的响应为500“内部服务器错误”。我浏览了Django应用程序的日志,发现未访问后端URL。
对此提供的任何帮助都将受到赞赏
谢谢
Avinash Deshmukh。
我终于可以用POST
执行multipart/form-data
请求以上传CSV。
下面是必需的步骤。
将“内容类型”添加到“方法请求”->请求正文中,作为“多部分/表单数据”。
在“集成请求”中,选中“使用代理集成”复选框。
在Ajax调用中,从标题列表中删除“ Content-Type”。可以看出,“ Content-Type”标头是与“请求正文”有效负载一起发送的。因此,修改后的Ajax调用可以是这样的:
$.ajax({
method: 'POST',
url: 'https://47483nvh39.execute-api.ap-south-1.amazonaws.com/mystage/main_resource/upload_csv',
headers: {
Authorization: authToken,
"Accept": "*/*"
},
contentType: 'multipart/form-data',
data: formData,
dataType: "json",
processData: false,
success: completeRequest,
error: function ajaxError(jqXHR, textStatus, errorThrown) {
console.error('Error: ', textStatus, ', Details: ', errorThrown);
console.error('Response: ', jqXHR.responseText);
console.log("Status: " + jqXHR.status);
if (jqXHR.status == 401 || jqXHR.status == 403) {
//redirectToLogin();
} else {
alert('An error occured:\n' + jqXHR.responseText);
}
}
});
希望这将帮助那些在集成过程中面临挑战的人。