2016-02-26 2 views
2

Я пытался выяснить, как загрузить каталог на S3 уже довольно давно, используя SDK для iOS для AWS.Загрузка каталога рекурсивно iOS AWS S3

В настоящее время у меня есть .zip каталоги, которые я загружал. Используя s3cmd на моем сервере EC2, я могу загружать каталоги без проблем. Я также прочитал, что это возможно, используя другие SDK.

Это код, у меня сейчас (быстрые):

let folderPath = DocumentFolder.stringByAppendingString("/folderPath/folder") 
let uploadRequest = AWSS3TransferManagerUploadRequest() 
      uploadRequest.bucket = "my-bucket" 
      uploadRequest.serverSideEncryption = AWSS3ServerSideEncryption.AwsKms 
      uploadRequest.body = NSURL(fileURLWithPath: folderPath) 
      uploadRequest.key = "/\(folderName)/" 


      AWSS3TransferManager.defaultS3TransferManager().upload(uploadRequest) 

Однако, это заставляет меня получить NSInvalidArgumentException.

Это точная ошибка:

2016-02-26 15:11:10.672 Q-Gate[1002:417054] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[NSConcreteData initWithBytes:length:copy:deallocator:]: absurd length: 18446744073709551615, maximum size: 9223372036854775808 bytes' *** First throw call stack: (0x181e55900 0x1814c3f80 0x181e55848 0x182743ef4 0x182743e38 0x1001ccdd0 0x1001cd7fc 0x18242287c 0x182420eb4 0x182420d74 0x182420ca4 0x1824a6ee4 0x182420c30 0x101e81bb0 0x101e8b354 0x182417a88 0x181d390ac 0x18241796c 0x18241782c 0x182417658 0x181e0cefc 0x181e0c990 0x181e0a690 0x181d39680 0x1824a9434 0x182817c40 0x181abfb28 0x181abfa8c 0x181abd028) libc++abi.dylib: terminating with uncaught exception of type NSException

Если изменить путь к .zip, он не загружает никаких проблем.

Кто-нибудь знает, как правильно загрузить каталог в s3 с помощью своего SDK для iOS?

ответ

0

Вы не можете передать каталог как body. Вам нужно рекурсивно перечислить файлы в каталоге и вызвать - upload: для каждого файла.

AWSS3TransferManager() недействительный инициализатор для этого класса. reason за исключением является

`- init` is not a valid initializer. Use `+ defaultS3TransferManager` or `+ S3TransferManagerForKey:` instead. 

Вы должны использовать AWSS3TransferManager.defaultS3TransferManager() или AWSS3TransferManager(forKey: "YourKey"). Читайте API docs для более подробной информации.

+0

Я случайно оставил эту часть при изменении моего кода для лучшей читаемости в этом сообщении. В моем фактическом проекте я так называю это. – kakkman

Смежные вопросы