首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过Rest发送CSV文件

通过Rest发送CSV文件
EN

Stack Overflow用户
提问于 2020-10-23 11:22:34
回答 1查看 9.5K关注 0票数 0

我不是开发人员,但最近使用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的代码:

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

发布于 2020-10-23 12:14:41

上传文件应该直接上传到Amazon,我之所以这么说,是因为AWS有一个6MB的限制作为调用的有效负载。

有几种方式可以上传到S3,下面有三种方法:

  1. SDK
  2. CLI
  3. Rest

VB没有SDK,但如果使用VB .Net,则可以使用.Net SDK。一个例子是可用的这里。或者,您可以通过VB调用AWS,这不是那么巧妙(更多的是黑客),而是可能的。详细信息可获得这里。或者,您可以使用AWS S3 Rest (可用的这里详细信息)上载文件。

文件可以在没有凭据的情况下上传到亚马逊S3,前提是存储桶策略允许打开桶。桶策略的示例是可用的这里

如果存储桶被锁定(推荐),则应该使用临时凭据将其上载到Amazon。您可以通过为PUT提供预先签名的URL获得临时凭据,也可以使用亚马逊科尼图之类的服务授予临时凭据。Amazon由两个部分组成,一个是存储凭据的用户池,另一个是联邦/身份池。您可以使用Amazon标识池生成对Amazon标识的临时凭据,并使用经过身份验证的凭据进行访问管理。通过身份验证的凭据可以来自苹果,谷歌,亚马逊,科尼图,SAML和OpenID。,通过身份验证的凭据被交换为IAM凭据。IAM凭据附加到策略,该策略应该具有上载文件的权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64499036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档