AWS - 使用 multipart/form-data 使用 API 网关上传 CSV 文件
AWS - Upload CSV file using API Gateway using multipart/form-data
我有一个 use-case,我需要使用 AngularJS 应用程序通过 AWS API 网关将 CSV 文件上传到我的后端应用程序(Elastic 中的 运行 Beanstalk - Django Python REST 应用程序)。
- API 网关与 AWS Cognito 集成。
- 后端应用程序需要使用 CSV 上传的 form-data。
我已经使用 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方法
中完成
- API 网关 -> 设置 -> 二进制媒体类型 - 添加'multipart/form-data
- 将 headers 添加到 "Method Request" - "Content-Type" 和 "Accept"
- 已将 headers 添加到 "Integration Request" - "Content-Type" 和 "Accept"
- 将内容类型添加到 "Method Request" 请求 Body 为 "multipart/form-data"
- 在 "Integration Request" 添加 multipart/form-data 到 "Mapping Templates"
完成所有这些设置后,我得到的响应为 500 "Internal server error"。
我查看了 Django 应用程序的日志,发现后端 URL 未被访问。
感谢任何与此相关的帮助
谢谢
Avinash Deshmukh.
我终于能够使用 multipart/form-data
执行 POST
请求以进行 CSV 上传。
以下是必需的步骤。
- 在 API 网关 -> 设置 -> 二进制媒体类型中添加二进制媒体类型 'multipart/form-data'
- 将 headers "Content-Type" 和 "Accept" 添加到 "Method Request".
将 "Content-Type" 添加到 "Method Request" -> 请求 Body 作为 "multipart/form-data"。
在"Integration Request"select复选框"Use Proxy Integration".
在 Ajax 调用中,从 headers 列表中删除 "Content-Type"。据观察,"Content-Type" header 与 "Request Body" 有效载荷一起发送。
所以修改后的 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);
}
}
});
希望这对那些在整合过程中面临挑战的人有所帮助。
我有一个 use-case,我需要使用 AngularJS 应用程序通过 AWS API 网关将 CSV 文件上传到我的后端应用程序(Elastic 中的 运行 Beanstalk - Django Python REST 应用程序)。
- API 网关与 AWS Cognito 集成。
- 后端应用程序需要使用 CSV 上传的 form-data。
我已经使用 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方法
中完成- API 网关 -> 设置 -> 二进制媒体类型 - 添加'multipart/form-data
- 将 headers 添加到 "Method Request" - "Content-Type" 和 "Accept"
- 已将 headers 添加到 "Integration Request" - "Content-Type" 和 "Accept"
- 将内容类型添加到 "Method Request" 请求 Body 为 "multipart/form-data"
- 在 "Integration Request" 添加 multipart/form-data 到 "Mapping Templates"
完成所有这些设置后,我得到的响应为 500 "Internal server error"。 我查看了 Django 应用程序的日志,发现后端 URL 未被访问。
感谢任何与此相关的帮助
谢谢
Avinash Deshmukh.
我终于能够使用 multipart/form-data
执行 POST
请求以进行 CSV 上传。
以下是必需的步骤。
- 在 API 网关 -> 设置 -> 二进制媒体类型中添加二进制媒体类型 'multipart/form-data'
- 将 headers "Content-Type" 和 "Accept" 添加到 "Method Request".
将 "Content-Type" 添加到 "Method Request" -> 请求 Body 作为 "multipart/form-data"。
在"Integration Request"select复选框"Use Proxy Integration".
在 Ajax 调用中,从 headers 列表中删除 "Content-Type"。据观察,"Content-Type" header 与 "Request Body" 有效载荷一起发送。 所以修改后的 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);
}
}
});
希望这对那些在整合过程中面临挑战的人有所帮助。