- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图使用适用于 MAC 的 Amazon sdk 上传一个巨大的文件 (8GB)(虽然他们没有适用于 MAC 的 sdk,但我通过删除 UIKit 引用修改了 IOS sdk 源代码并为 MAC 重新编译)。它实际上适用于文件,可能高达 800MB ~ 1GB。但是每当我尝试上传一个 8GB 的文件时,我都会遇到异常。异常表示“互联网连接丢失”。奇怪,我的互联网连接很好(2Mbps 上传速度 :-/)。我正在使用分段上传 api 并上传 5MB 的 block 。当我遇到异常时,我不会放弃,但我会重试同一个 block 至少 5 次,然后放弃。在这次重试之间,我睡了几秒钟。但最神奇的是,一旦chunk upload 遇到异常,retry 将无法正常工作。我不明白。谁能帮帮我????
提前致谢!
下面我也在添加代码!
fileHandle = [NSFileHandle fileHandleForReadingAtPath:filePath];
S3InitiateMultipartUploadRequest* initReq = [[S3InitiateMultipartUploadRequest alloc] initWithKey:requestDetails.md5 inBucket:requestDetails.bucket];
initReq.contentType = requestDetails.contentType;
S3MultipartUpload* upload = [amazonS3Client_ initiateMultipartUpload:initReq].multipartUpload;
S3CompleteMultipartUploadRequest* compReq = [[S3CompleteMultipartUploadRequest alloc] initWithMultipartUpload:upload];
compReq.contentType = requestDetails.contentType;
NSData* data = [fileHandle readDataOfLength:PART_SIZE];
int part = 0;
...............................
while([data length] > 0)
{
@try {
S3UploadPartRequest* upReq = [[S3UploadPartRequest alloc] initWithMultipartUpload:upload];
upReq.partNumber = part + 1;
upReq.contentLength = data.length;
upReq.data = data;
upReq.contentType = requestDetails.contentType;
response = [amazonS3Client_ uploadPart:upReq];
[compReq addPartWithPartNumber:(part + 1) withETag:response.etag];
offset += [data length];
[fileHandle seekToFileOffset:offset];
data = [fileHandle readDataOfLength:PART_SIZE];
part++;
........................
}
@catch (AmazonClientException *exception) {
.............................
if([exception.message rangeOfString:@"expire"].location != NSNotFound)
{
// renew credentials code
return [self multipartUpload:requestDetails withFilePath:filePath];
}
}
}
[amazonS3Client_ completeMultipartUpload:compReq];
最佳答案
我是 AWS SDK for iOS 的维护者之一。虽然我们还没有测试过这种大小的文件,但我想不出 SDK 中的任何内容会导致这种情况。您可能想尝试和/或包含在问题中的一些事情:
适用于 iOS 的 AWS 开发工具包的最新版本包含一个选项,用于禁用来自开发工具包本身的异常。这可能会显示异常源是在 SDK 中还是其他地方。
你说你正在重试异常,但你是重新使用请求还是创建一个新请求?包含您的代码可能有助于其他人提供建议。
当你进入这个状态后,你还能执行任何其他操作吗?您确定您没有以某种方式重置您的网络连接吗?
跟进
过去几天,我花了很多时间尝试使用最新版本的适用于 iOS 的 AWS 开发工具包重现该问题,但没有成功。我能够使用分段上传将 10GB 的文件成功上传到 Amazon S3。
我想总结一些发现并为后续步骤提供一些建议:
您真的应该更新 SDK。自您下载以来的 6 个月内,适用于 iOS 的 AWS 开发工具包进行了多次更新,其中一些与连接处理有关,可能有助于解决此问题。
您对互联网连接的测试可能没有测试正确的东西。您没有包含此代码,因此尚不清楚,但如果您要测试的只是本地设备具有链接并且可以访问其网关,那么这不一定是表明您的设备没有问题的有效指标连接到 Amazon S3。您遇到超时(稍后会详细介绍)这一事实表明您的计算机在连接 Amazon S3 时遇到了问题。发生这种情况的原因有很多,包括网络硬件故障或您的 ISP 的明确流量调整。
SDK 在超时处理方面存在不一致。对于除 S3 之外的所有客户端,超时应用于 NSURLConnection 对象以及处理实际请求。对于 S3,它仅适用于请求的处理,这意味着 NSURLConnection timeoutInverval 属性未修改。 NSURLConnection timeoutInterval 属性是建立连接的超时时间。一旦发送或接收数据,即使只是涓涓细流,NSURLConnection 也不会超时。这意味着如果您收到超时异常,您的计算机将无法在默认超时间隔 (60s) 内建立与 Amazon S3 的连接。我们将审查并适当修补 SDK 以解决此不一致问题。
正如我在原始回答中所述,最好确认您是否可以向 Amazon S3 发出另一个请求(如列表存储桶/对象)以及访问另一个外部资源(如 google.com)你进入了这种失败状态。这至少会让您有能力去您的 ISP 并就正在发生的事情提出更好的问题。
希望这些信息对您有所帮助
关于ios - S3 上传程序在尝试上传大文件时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12844217/
这个问题在这里已经有了答案: Why don't Java's +=, -=, *=, /= compound assignment operators require casting? (11 个
我搜索了很多,但没有一个链接能帮助我解决这个问题。我得到了 ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s
我正在做 RegexOne 正则表达式教程,它有一个 question关于编写正则表达式以删除不必要的空格。 教程中提供的解决方案是 We can just skip all the starting
([\s\S]+|\s?) 中 |\s? 的目的或作用是什么?如果没有它,表达式会不会与 ([\s\S]+) 相同? 最佳答案 这不是完全相同的。 ([\s\S]+|\s?) 会匹配空字符串,而 ([
这个正则表达式有一组还是两组? 我正在尝试使用第二组访问 bookTitle 但出现错误: Pattern pattern = Pattern.compile("^\\s*(.*?)\\s+-\\s+
在 C 中给定一个字符串指针 s,下面的迭代会做什么?即它以什么方式遍历字符串? for (++s ; *s; ++s); 最佳答案 for (++s ; *s;++s) 表示 将指针 s 递增到字符
我正在用一个 node.js 应用程序解析一个大列表并有这段代码 sizeCode = dbfr.CN_DESC.split('\s+-\s*|\s*-\s+') 这似乎不起作用,因为它返回了 [ '
我正在编写一个简单的字符串连接程序。 该程序按照我发布的方式运行。但是,我首先使用以下代码编写它来查找字符串的结尾: while (*s++) ; 但是,这个方法并没有奏效。我传递给它的字符串
这个问题已经有答案了: What does (?和aramchand来自Mohandas Karamchand G 因此,在使用这些匹配来分割字符串后,您最终会得到 {"M", "K", "G"} 注
我正在尝试转换 Map到 List使用 lambda。 本质上,我想将键和值与 '=' 连接起来之间。这看起来微不足道,但我找不到如何去做。 例如 Map map = new HashMap<>();
我正在经历 K & R,并且在递增指针时遇到困难。练习 5.3(第 107 页)要求您使用指针编写一个 strcat 函数。 在伪代码中,该函数执行以下操作: 将 2 个字符串作为输入。 找到字符串
在下面的代码中,pS 和 s.pS 在最后一行是否保证相等?也就是说,在语句S s = S();中,是否可以确定不会构造一个临时的S? #include using namespace std; s
演示示例代码: public void ReverseString(char[] s) { for(int i = 0, j = s.Length-1; i < j; i++, j--){
我一直在寻找类似于 .NET examples 中的示例的 PowerShell 脚本.取一个 New-TimeSpan 并显示为 1 天 2 小时 3 分钟 4 秒。排除其零的地方,在需要的地方添加
def func(s): s = s + " is corrected" return s string_list = ["She", "He"] for s in string_li
我是 python 的新手。当我在互联网上搜索 lambda 时。我在 lambda_functions 中找到了这个声明. processFunc = collapse and (lambda s:
我最近开始学习正则表达式,并试图为上面的问题写一个正则表达式。如果限制只放在一个字母上(例如不超过 2 个“b”),这并不困难。 那么答案就是:a* c*(b|ε)a* c*(b|ε)a* c* 但是
当我运行 npm install 时出现以下错误,但我无法修复它。 我试过:npm install -g windows-build-tools 也没有修复这个错误 ERR! configure
有很多有趣的haskell网上可以找到片段。 This post可以在 this (awesome) Stack Overflow question 下找到. The author写道: discou
我知道以下三行代码旨在将字符串提取到$ value中并将其存储在$ header中。但是我不知道$value =~ s/^\s+//;和$value =~ s/\s+$//;之间有什么区别。 $val
我是一名优秀的程序员,十分优秀!