curl 通过Rest API发送CSV文件

w51jfk4q  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(185)

我不是一个开发人员,但最近一直在工作中使用VBA,Python和AWS进行大量的自动化工作。最近我开始学习和使用AWS中的API。
我一直在尝试通过REST API上传CSV文件,但它没有按预期工作。
基本上,我已经使用API网关来设置我的API,该API触发Lambda函数以将文件上传到S3桶。
当我在Postman中测试我的API时,它工作正常,我只需要将Headers设置为Key:“内容类型”和值:“应用程序/csv”,然后在正文部分我选择了“二进制”,并浏览了我想上传的csv文件。
但问题是,当我尝试从我的应用程序调用我的API时(或从Postman使用原始文本而不是二进制),我发送了以下Body(也尝试了不使用双引号,也没有工作):--数据二进制“\文件位置\文件名.csv”
api返回一个成功代码,但是当我在S3中打开文件时,内容是“--data-binary“\file-location\file-name.csv””,而不是我选择的实际文件内容。
下面是我在VBa中调用API所用的代码:

Dim ws As Worksheet
Dim URL, env, msg, result  As String
Dim objHTTP As Object

Set ws = ThisWorkbook.Worksheets("Sheet1")
URL = "https://api-url" 
msg = "--data-binary ""\\file_location\file_name.csv"""

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.Open "POST", URL, False

objHTTP.setRequestHeader "Content-Type", "application/csv" 
objHTTP.send (msg)
result = objHTTP.responseText

'getResponse
ws.Range("s3_api_resp").Value = result

Set objHTTP = Nothing
7dl7o3gd

7dl7o3gd1#

上传文件应该直接上传到Amazon S3,我这么说的原因是AWS Lambda有一个6 MB的limit作为调用负载。
上传到S3有几种方法,这里介绍三种方法:
1.软件开发工具包
1.命令行界面
1.剩余API
VB没有SDK,但是如果你使用的是VB .Net,你可以使用.Net SDK。here提供了一个示例。或者你可以通过VB调用AWS CLI,这不是很灵活(更像是一个黑客),但也是可能的。详细信息here提供。或者你可以使用AWS S3 Rest API上传文件,详细信息here提供。
如果bucket策略允许打开bucket,则无需凭据即可将文件上传到Amazon S3。bucket策略的示例有here
如果铲斗锁定(推荐)则应使用临时凭据上传到Amazon S3。您可以通过providing pre-signed URLs for PUT获取临时凭据,也可以使用Amazon Cognito等服务授予临时凭据。Amazon Cognito由两部分组成:用于存储凭据的用户池和联合/身份池。您可以使用Amazon Cognito身份池,通过已验证的凭据生成Amazon Identity and Access Management的临时凭据。已验证的凭据可以来自Apple, Google, Amazon, Cognito, SAML, and OpenID.已验证的凭据将交换为IAM凭据。IAM凭据附加到策略,并且该策略应具有上载文件的权限。

相关问题