Amazon web services 从AWS S3添加BigCommerce产品图像

Amazon web services 从AWS S3添加BigCommerce产品图像,amazon-web-services,amazon-s3,bigcommerce,Amazon Web Services,Amazon S3,Bigcommerce,任何试图使用已签名的AWS S3 URL添加产品图像的其他人。 url最终具有一些附加属性,如&AWSAccessKeyId=AVEL2J32A6Q&Expires=1499769146&Signature=cdgifilfdad+0SHW1xvZ9A= 此url中的某些内容会影响BigCommerce图像解析器,并返回错误-字段“image_file”无效 有人对私有S3文件有一些解决方法吗? 在使用S3签名URL的同时,通过BigCommerceAPI向产品添加产品图像确实是最有可能的 如上

任何试图使用已签名的AWS S3 URL添加产品图像的其他人。 url最终具有一些附加属性,如&AWSAccessKeyId=AVEL2J32A6Q&Expires=1499769146&Signature=cdgifilfdad+0SHW1xvZ9A=

此url中的某些内容会影响BigCommerce图像解析器,并返回错误-字段“image_file”无效

有人对私有S3文件有一些解决方法吗?

在使用S3签名URL的同时,通过BigCommerceAPI向产品添加产品图像确实是最有可能的

如上所述,您可能只是对签名URL的URL语法有问题。在将S3URL传递给BigCommerce之前,需要对其进行URL编码。特别是,如果您单独生成签名,请确保对其进行URL编码

签名的S3URL示例如下所示

'https://bucket-name.s3.amazonaws.com/folder/path/img.png?AWSAccessKeyId=key_id_here&Expires=1499804871&Signature=url_encoded_sig_here' 下面是一个示例,说明如何在Node.js V6中使用BigCommerce和AWS API时以编程方式实现所需的结果:

//加载AWS和BC库: const AWS=需要“AWS-sdk”;//npm安装aws sdk const BC=需要“./连接”;//wgethttps://raw.githubusercontent.com/mullinsr/bigcommerce-node.js/master/connection.js //配置AWS SDK并初始化S3类: AWS.config=新的AWS.config{ accessKeyId:“此处的访问密钥ID”, secretAccessKey:“此处的秘密访问密钥”, 地区:'us-east-1'//输入地区N.弗吉尼亚=us-east-1 |俄亥俄=us-east-2 | N.加利福尼亚=us-west-1 |俄勒冈州=us-west-2 }; 常数s3=新的AWS.s3;//初始化S3类! //配置并初始化BC API连接: 常量设置={ 路径:'https://store-url.com', 用户:“用户名”, 传球:“阿皮奇” }; 常量api=新的BCsettings;//初始化BigCommerceAPI。 //生成已签名的URL: 常量参数={ Bucket:'此处为您的Bucket名称,位于AWS配置中设置的区域', 键:“folder/path/image.png”, 过期:URL过期前10//10秒。 }; const url=s3.getSignedUrl'getObject',params;//生成URL! //定义BC图像选项@请参见:https://developer.bigcommerce.com/api/v2/create-a-product-image 常数img={ 图像文件:url, 是真的吗 }; //输入要为其分配产品图像的产品ID: 设pid=5; //执行API请求!::将图像分配给产品! api.post'/products/'+pid'/images',img.thenres=>{ console.log“已成功将映像添加到产品中!映像ID=”,res.ID; }.catcherr=>{ console.log“捕获错误:”,err; };
其他GET参数ResponseContentDisposition出错。针对此特定案例删除了它,一切正常。

您从哪里获得此签名URL?我认为它有三个潜在的问题。假设AWSAccessKeyId是第一个querystring参数,那么它的前面应该是?而不是&。在签名中,+和final=都应该是url转义的。您没有显示整个URL,因此我还将询问您是否在开始时包含https://是的,urlencode已就位。但是我的项目有一些额外的参数-作为响应配置内容和最终URL看起来像?响应内容配置=内联%3B%20filename%3D%22mockup-0628b318.jpg%22&AWSAccessKeyId=AKIAJQHR2LVEL2J32A6Q&Expires=1500020396&Signature=Yn9Whq8w4WsrKB86pgOS%2BGmlD7U%3D