如何使用 aws-sdk for javascript 将图像从 iOS 应用程序(使用 Kony 构建)上传到 AWS S3?

How do I upload an image from iOS app (built with Kony) to AWS S3 using aws-sdk for javascript?

我正在使用 Kony Visualizer(一个低代码平台)构建一个移动应用程序(构建一个 iOS 和 Android 本机应用程序)可以 post 用户拍摄的图像到一个 s3 桶。我目前正在为 js 使用 aws sdk(很容易导入到这个低代码平台),并且我正在尝试使用 s3.putObject 调用来推送图像。我发现我可以将图像原始字节的 base64 字符串从 Android 设备推送到 s3 存储,但在 iOS 设备上这样做是不成功的。我也在 this link 的 Kony 论坛上 post 编辑了这个,并将在下面粘贴我的代码。另外,我知道与 s3 的连接正在工作,因为我在代码的另一部分 posting csv 文件到同一个存储桶。

AWS.config.update({
    accessKeyId: <accessKeyId>,
    secretAccessKey: <secretAccessKey>,
    region: <region>
});

var rawImg = this.view.Picture.rawBytes;
var b64img = kony.convertToBase64(rawImg);

var bucketImage = new AWS.S3();
var paramsImage = {
    Bucket: <bucket-name>,
    Key: "images/imageB64.jpg",
    ContentType: 'image/jpg',
    Body: b64img};

bucketImage.putObject(paramsImage, function(err,res){
    if (err) {
        alert(err);}
    else {
        alert('Success');
    }
});

如果您在使用 AWS SDK for JS 上传照片时仍然遇到问题,请尝试创建 Foreign Function Interface (FFI) 并使用 AWS SDK for iOS 的替代方法。这就是我团队中的开发人员在我们的 Kony 应用程序中使用 S3 上传的方式。

他用AWSS3TransferManagerAWSS3TransferManagerUploadRequest类来做到这一点。

Here's a code example in Swift

我确定 FFI 选项会起作用,但我发现一旦我添加了 App Transport Security Settings -- Allow Arbitrary Loads - YES to my Info.plist in Xcode,并且,这些上传开始工作。显然这使用了 http headers,iOS 不会自动允许。我还必须将以下 JSON 添加到我在 Kony Workspace 中项目下的 infoplist_configuration.json 文件中: "NSAppTransportSecurity" : { "NSAllowsArbitraryLoads":正确 }