ビデオ/オーディオ/画像などのメディアを転送するチャットアプリを開発しています。
以下のコード スニペットで転送を行うと、Wifi では転送はスムーズですが、3G ネットワークに移動すると非常に遅くなります。
また、別の問題は、バックグラウンドで AWS SDK が転送を一時停止し、フォアグラウンドになると再開することです。
1) AWS リージョンを変更しようとしても成功しないため、転送を高速化するにはどうすればよいですか。2) また、AWS S3 転送マネージャーと比較して S3Background 転送の例を使用しますが、ホーム ボタンを押すとダウンロードが一時停止します。
以下は私のコードを切り取ったものです。
//アップロード機能
AWSS3TransferManager *transferManager = [AWSS3TransferManager defaultS3TransferManager];
AWSS3TransferManagerUploadRequest *uploadRequest = [AWSS3TransferManagerUploadRequest new];
uploadRequest.bucket = S3BucketName;
User *userMO = .....my user details
NSString *fileName = [[filePath componentsSeparatedByString:@"/"] lastObject];
uploadRequest.key = [userMO.user_pool_id stringByAppendingPathComponent:fileName];
NSURL *uploadFileURL = [NSURL fileURLWithPath:filePath];
uploadRequest.body = uploadFileURL;
uploadRequest.expires = [NSDate dateWithTimeIntervalSinceNow:3600];
NSString *fileContentTypeStr = @"image/jpg";
if ([FileManager isVideoFile:fileName]) {
// fileContentTypeStr = [NSString stringWithFormat:@"video/%@",[[fileName pathExtension] lowercaseString]];
fileContentTypeStr = [NSString stringWithFormat:@"video/quicktime"];
}
else if ([FileManager isImageFile:fileName]) {
fileContentTypeStr = [NSString stringWithFormat:@"image/%@",[[fileName pathExtension] lowercaseString]];
}
else if ([FileManager isAudioFile:fileName]) {
fileContentTypeStr = [NSString stringWithFormat:@"audio/%@",[[fileName pathExtension] lowercaseString]];
}
uploadRequest.contentType = fileContentTypeStr;
[[transferManager upload:uploadRequest] continueWithBlock:^id(AWSTask *task) {
if (task.error) {
if ([task.error.domain isEqualToString:AWSS3TransferManagerErrorDomain]) {
switch (task.error.code) {
case AWSS3TransferManagerErrorCancelled:
{
//updating ui to notify cancel
}
break;
case AWSS3TransferManagerErrorPaused:
{
//updating ui to notify paused
}
break;
default:
{
NSLog(@"Upload task failed: %@",[task.error localizedDescription]);
//updating ui to notify failed
}
break;
}
} else {
NSLog(@"Upload task failed: %@",[task.error localizedDescription]);
//updating ui to notify failed
}
}
if (task.result)
{
//updating ui to notify finished
}
return nil;
}];
if(uploadRequest.state == AWSS3TransferManagerRequestStateRunning)
{
//updating ui to notify progress
}
//Add the request to the current upload cache handler entry as handle
どの団体にも提案があり、同様の問題に直面しました。