我不是开发人员,但最近使用VBA、Python和AWS进行了大量自动化工作。最近,我开始学习和使用AWS中的API。
我一直试图通过REST上传一个CSV文件,但它并不像预期的那样工作。
基本上,我使用了API来设置我的API,该API触发Lambda函数将文件上传到S3桶。
当我在Postman中测试我的API时,它工作得很好,我只需将标题设置为键:“Content”和Value:"application/ csv ",然后在正文部分选择“二进制”并浏览我想上传的csv文件。
但问题是,当我试图从我的应用程序(或者从Postman使用原始文本而不是二进制)调用api时,我发送了以下正文(也尝试了没有双引号,但也没有工作):-数据-二进制“\file-location-name.csv”
api返回一个成功的代码,但是当我在S3中打开文件时,内容是“--数据-二进制”\ 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
发布于 2020-10-23 12:14:41
上传文件应该直接上传到Amazon,我之所以这么说,是因为AWS有一个6MB的限制作为调用的有效负载。
有几种方式可以上传到S3,下面有三种方法:
VB没有SDK,但如果使用VB .Net,则可以使用.Net SDK。一个例子是可用的这里。或者,您可以通过VB调用AWS,这不是那么巧妙(更多的是黑客),而是可能的。详细信息可获得这里。或者,您可以使用AWS S3 Rest (可用的这里详细信息)上载文件。
文件可以在没有凭据的情况下上传到亚马逊S3,前提是存储桶策略允许打开桶。桶策略的示例是可用的这里。
如果存储桶被锁定(推荐),则应该使用临时凭据将其上载到Amazon。您可以通过为PUT提供预先签名的URL获得临时凭据,也可以使用亚马逊科尼图之类的服务授予临时凭据。Amazon由两个部分组成,一个是存储凭据的用户池,另一个是联邦/身份池。您可以使用Amazon标识池生成对Amazon标识的临时凭据,并使用经过身份验证的凭据进行访问管理。通过身份验证的凭据可以来自苹果,谷歌,亚马逊,科尼图,SAML和OpenID。,通过身份验证的凭据被交换为IAM凭据。IAM凭据附加到策略,该策略应该具有上载文件的权限。
https://stackoverflow.com/questions/64499036
复制相似问题