Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 通过RESTAPI发送CSV文件_Vba_Api_Rest_Curl_Aws Api Gateway - Fatal编程技术网

Vba 通过RESTAPI发送CSV文件

Vba 通过RESTAPI发送CSV文件,vba,api,rest,curl,aws-api-gateway,Vba,Api,Rest,Curl,Aws Api Gateway,我不是开发人员,但最近一直在使用VBA、Python和AWS进行大量自动化工作。最近,我开始学习和使用AWS中的API 我一直在尝试通过RESTAPI上传CSV文件,但它并没有按预期工作 基本上,我使用API网关来设置我的API,该API触发Lambda函数将文件上载到S3存储桶 当我在Postman中测试我的API时,它工作得很好,我只需将标题设置为键:“内容类型”和值:“应用程序/csv”,然后在主体部分选择“二进制”并浏览我想要上传的csv文件 但问题是,当我试图从我的应用程序(或从使用原

我不是开发人员,但最近一直在使用VBA、Python和AWS进行大量自动化工作。最近,我开始学习和使用AWS中的API

我一直在尝试通过RESTAPI上传CSV文件,但它并没有按预期工作

基本上,我使用API网关来设置我的API,该API触发Lambda函数将文件上载到S3存储桶

当我在Postman中测试我的API时,它工作得很好,我只需将标题设置为键:“内容类型”和值:“应用程序/csv”,然后在主体部分选择“二进制”并浏览我想要上传的csv文件

但问题是,当我试图从我的应用程序(或从使用原始文本而不是二进制的Postman)调用api时,我发送了以下正文(也尝试了不使用双引号的方式,但也不起作用): --数据二进制“\file location\file name.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

上传文件应该直接上传到AmazonS3,我之所以这么说,是因为AWS Lambda有一个6MBs的调用负载

上传到S3有几种方式,以下是三种方式:

  • SDK
  • CLI
  • RESTAPI
  • VB没有SDK,但如果您使用的是VB.Net,则可以使用.Net SDK。有一个例子。或者,您可以通过VB调用AWSCLI,这不是很简单(更像是一个黑客),但却是可能的。详情可查。或者,您可以使用AWS S3 Rest API上载文件,详细信息可用

    如果bucket策略允许打开bucket,则可以将文件上载到AmazonS3而无需凭据。桶策略的示例可用

    如果bucket被锁定(推荐),那么您应该使用临时凭据上传到AmazonS3。您可以通过获取临时凭据,也可以使用服务(如)授予临时凭据。AmazonCognito由两部分组成,用于存储凭证的用户池和联邦/身份池。您可以使用Amazon Cognito标识池生成临时凭证,以使用经过身份验证的凭证对Amazon标识和访问管理进行验证。通过身份验证的凭据可以来源于通过身份验证的凭据交换为IAM凭据。凭据附加到策略,该策略应有上载文件的权限