微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过预先签名的 URL 上传多个文件表示成功,但有些文件失败

如何解决通过预先签名的 URL 上传多个文件表示成功,但有些文件失败

我们在 Android 上运行物联网设备。这些东西通过使用预签名 URL 的 PUT 请求将文件上传到我们的 S3 存储桶。它适用于单个上传,但当我们开始连续上传多个上传时,结果是随机的。我们运行的测试循环遍历五个 zip 文件的列表,每个文件的大小约为 1.2MB。在这五个文件中,我们始终看到 1 或 2 个上传失败。但是,每次上传的响应代码都表明文件已成功上传

这是我们用来上传文件代码

   var client = new HttpClient();
   client.DefaultRequestHeaders.Add("User-Agent","C# App");               
   HttpResponseMessage responseFromCloud = client.PutAsync(presigned_url,fileContent).GetAwaiter().GetResult();
   if ((responseFromCloud.StatusCode == System.Net.HttpStatusCode.OK) || (responseFromCloud.StatusCode == System.Net.HttpStatusCode.Created)) {
      Log.Debug(Tag,$"MqttSendFiletoPresignedUrl: File was Sent: {filename}");
      bRc = true;
   }               

在我们最新的测试中,我们发送了五个 zip 文件,上面的代码表明它们都已成功发送,如下所示:

07-28 15:50:29.914 QUALCOMM MSM8996 for arm64    Debug    3495    CloudUpload    MqttSendFiletoPresignedUrl: File was Sent: /storage/emulated/0/Thing_temp/Validation_20210728140854.zip

07-28 15:50:29.878 QUALCOMM MSM8996 for arm64    Debug    3495    CloudUpload    MqttSendFiletoPresignedUrl: File was Sent: /storage/emulated/0/Thing_temp/Validation_20210728142726.zip

07-28 15:50:29.849 QUALCOMM MSM8996 for arm64    Debug    3495    CloudUpload    MqttSendFiletoPresignedUrl: File was Sent: /storage/emulated/0/Thing_temp/Validation_20210728145852.zip

07-28 15:50:29.679 QUALCOMM MSM8996 for arm64    Debug    3495    CloudUpload    MqttSendFiletoPresignedUrl: File was Sent: /storage/emulated/0/Thing_temp/Validation_20210728144705.zip

07-28 15:50:29.232 QUALCOMM MSM8996 for arm64    Debug    3495    CloudUpload    MqttSendFiletoPresignedUrl: File was Sent: /storage/emulated/0/Thing_temp/Validation_20210728153500.zip

但是,S3 中缺少其中一个文件(日期为 07-28 15:50:29.679 的文件)。事实上,当我检查 CloudWatch 中的日志文件时,我什至没有看到该文件的条目表明它甚至没有到达 S3。

这是生成预签名 URL 的 lambda:

var AWS = require('aws-sdk');
var iotdata = new AWS.IotData({endpoint: 'bla123bla456-ats.iot.us-east-1.amazonaws.com'});
exports.handler = (event,context,callback) => {
    var s3 = new AWS.S3();
    var file_name = event.file_name;
    var params = {
        Bucket: 'myBucket',Key:  + 'myFiles/' + event.thing_id.toLowerCase() + '/' + event.event_uuid + '/' + file_name,Expires: 120
    };
    var url = s3.getSignedUrl('putObject',params); 
    iotdata.publish({
        topic: 'iot/' + event.instrument_id + '/pre-signed-s3-url-responses',payload: JSON.stringify({ presigned_url: url,file_name: file_name }),qos: 1
    }); 
};

谁能告诉我可能是什么问题?我很难调试这个,因为我无法生成/找到任何更具体的错误日志。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。