NSURLErrorDomain Code = -999 с использованием образца кода AFNetworking

Я использую пример из AFNetworking, чтобы заставить загружаться составные формы.

У меня есть приложение php, которое имеет многочастную форму на URL, который работает:

digital@nefarious-3 [03:26:21] [~]
-> % curl --form "upload=@Snow.jpg" http://example.dev/api/v1/sendFile
["Successful"]

Выше — та же самая конечная точка, с которой я пытаюсь заставить работать запрос AFNetworking. Сообщение генерируется только тогда, когда файл успешно обработан в конце API.

Ниже приведен вывод команды ls -lash на сервере:

-rw-r--r-- 1 vagrant vagrant 290190 Jan 26 15:26 Snow.jpg

Ниже приведен пример кода со страницы AFNetworking:

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.dev/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"upload" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil];
} error:nil];

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSProgress *progress = nil;

NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"%@ %@", response, responseObject);
}
}];

[uploadTask resume];

Это ошибки со следующим:

2015-01-26 15:16:09.683 digitaltest[8507:241970] Error: Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo=0x7fb223551a50 {NSErrorFailingURLKey=http://example.dev/api/v1/sendFile, NSLocalizedDescription=cancelled, NSErrorFailingURLStringKey=http://example.dev/api/v1/sendFile}

Из пользовательской регистрации на стороне PHP видно, что приложение iOS никогда не попадает на сервер. Сайт виден как на моем локальном компьютере, так и на симуляторе iPad, перенаправлений нет, и он не работает по протоколу SSL.

Я попробовал пример кода как в моем существующем приложении, так и в совершенно новом приложении с простой кнопкой «Привет, мир», но безуспешно.

Как мне заставить это работать?

EDIT: As requested here is additional debug:

2015-01-26 20:38:58.211 digitaltest[9340:276782] fileDataURL: file:/Users/digital/Desktop/snow.jpg -- file:///
2015-01-26 20:38:58.223 digitaltest[9340:276782] error: Error Domain=NSCocoaErrorDomain Code=260 "The operation couldn’t be completed. (Cocoa error 260.)" UserInfo=0x7ff531757020 {NSFilePath=/file:/Users/digital/Desktop/snow.jpg, NSUnderlyingError=0x7ff53177bc90 "The operation couldn’t be completed. No such file or directory"}

Вот вывод, подтверждающий наличие файла:

digital@nefarious-3 [08:39:59] [~]
-> % cd ~/Desktop
digital@nefarious-3 [08:40:05] [~/Desktop]
-> % LL
zsh: command not found: LL
digital@nefarious-3 [08:40:06] [~/Desktop]
-> % ll
total 1272
0 drwxr-xr-x+  15 digital  staff   510B 26 Jan 20:35 .
0 drwxr-xr-x+ 113 digital  staff   3.8K 26 Jan 20:40 ..
24 -rw-r--r--@   1 digital  staff   8.0K 26 Jan 20:35 .DS_Store
0 -rw-r--r--    1 digital  staff     0B 15 Jul  2013 .localized
8 -rw-r--r--@   1 digital  staff   2.5K  5 Jan 15:29 Snow[0].jpg
8 -rw-r--r--@   1 digital  staff   2.5K  5 Jan 15:29 Snow[1].jpg
8 -rw-r--r--@   1 digital  staff   2.5K  5 Jan 15:29 Snow[2].jpg
8 -rw-r--r--@   1 digital  staff   2.5K  5 Jan 15:29 Snow[3].jpg
8 -rw-r--r--@   1 digital  staff   2.5K 26 Jan 20:35 snow.jpg

Обратите внимание на временные метки.

0

Решение

Из-за песочницы допустимые пути получаются с помощью функции NSSearchPathForDirectoriesInDomains с доменом NSUserDomainMask,

Увидеть О файловой системе iOS для получения информации о доступных каталогах приложений.

Вот пример создания пути к каталогу документов для файла с именем «fileName»:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths firstObject];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];

Дополнительно можно читать файлы из пакета приложения.

0

Другие решения

Других решений пока нет …