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 应用程序)。

  1. API 网关与 AWS Cognito 集成。
  2. 后端应用程序需要使用 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方法

中完成
  1. API 网关 -> 设置 -> 二进制媒体类型 - 添加'multipart/form-data
  2. 将 headers 添加到 "Method Request" - "Content-Type" 和 "Accept"
  3. 已将 headers 添加到 "Integration Request" - "Content-Type" 和 "Accept"
  4. 将内容类型添加到 "Method Request" 请求 Body 为 "multipart/form-data"
  5. 在 "Integration Request" 添加 multipart/form-data 到 "Mapping Templates"

完成所有这些设置后,我得到的响应为 500 "Internal server error"。 我查看了 Django 应用程序的日志,发现后端 URL 未被访问。

感谢任何与此相关的帮助

谢谢

Avinash Deshmukh.

我终于能够使用 multipart/form-data 执行 POST 请求以进行 CSV 上传。

以下是必需的步骤。

  1. 在 API 网关 -> 设置 -> 二进制媒体类型中添加二进制媒体类型 'multipart/form-data'
  2. 将 headers "Content-Type" 和 "Accept" 添加到 "Method Request".
  3. 将 "Content-Type" 添加到 "Method Request" -> 请求 Body 作为 "multipart/form-data"。

  4. 在"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); } } });

希望这对那些在整合过程中面临挑战的人有所帮助。