NSURLErrorDomain Code=-999 使用 AFNetworking 示例代码

Posted

技术标签:

【中文标题】NSURLErrorDomain Code=-999 使用 AFNetworking 示例代码【英文标题】:NSURLErrorDomain Code=-999 using AFNetworking Sample Code 【发布时间】:2015-01-26 15:33:16 【问题描述】:

我正在使用来自 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 运行。

我已经在我现有的应用程序和带有简单的 hello world 按钮的全新应用程序中尝试了示例代码,但没有任何运气。

我如何让它工作?

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

注意时间戳

【问题讨论】:

查看Charles Proxy中的请求,它甚至可能永远发送不出去。 您是否验证了代码中的文件 URL 是正确的,例如检查它是否存在? @Zaph url 是正确的,将查看 Charles Proxy 并查看内容。 Charles 代理显示应用程序没有发出任何请求,我不确定这里发生了什么。 @Zaph 更新问题 【参考方案1】:

由于沙盒,允许的路径是通过使用带有域NSUserDomainMask 的函数NSSearchPathForDirectoriesInDomains 获得的。

有关可用应用目录的信息,请参阅About the iOS File System。

以下是为名为“fileName”的文件创建文档目录路径的示例:

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

此外还允许从应用程序包中读取文件。

【讨论】:

以上是关于NSURLErrorDomain Code=-999 使用 AFNetworking 示例代码的主要内容,如果未能解决你的问题,请参考以下文章

网络连接丢失。NSURLErrorDomain Code=-1005

AFNetworking 获取请求,获取 NSURLErrorDomain Code=-1005

NSURLErrorDomain Code=-1202 使用同步请求时

NSURLErrorDomain Code=-999 使用 AFNetworking 示例代码

ios奇葩问题 Error Domain=NSURLErrorDomain Code=-1003

在共享扩展中上传图片导致 NSURLErrorDomain Code=-997