从AFNetworking文档,我得到了下面的代码,同时试图上传的REST服务器,与其他客户端正常工作,但我的执行它与内部服务器错误崩溃的文件。
代码如下:
- (BOOL)uploadFile:(NSString *)path apiKey:(NSString *)apiKey
{
NSData *symbolsData = [NSData dataWithContentsOfFile:path];
if (!symbolsData) {
NSLog(@"Symbols file at %@ does not exist.", path);
return NO;
}
if ([symbolsData length] > 33554432) {
NSLog(@"Symbols file at %@ is too large to upload.", path);
return NO;
}
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:[NSString stringWithFormat:@"%@/upload/thefile", BaseURL] parameters:nil constructingBodyWithBlock:
^(id<AFMultipartFormData> formData)
{
[formData appendPartWithFileData:symbolsData name:@"file" fileName:[path lastPathComponent] mimeType:@"application/zip"];
}
error:nil];
[request setValue:apiKey forHTTPHeaderField:@"X-theapikey"];
AFURLSessionManager* manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionUploadTask* uploadTask = [manager uploadTaskWithStreamedRequest:request progress:nil completionHandler:
^(NSURLResponse *response, id responseObject, NSError *error)
{
if (!error)
{
NSLog(@"Successfully uploade file: %@\r\nwith Response: %@", [path lastPathComponent], (NSString*)responseObject);
}
else
{
NSLog(@"There was an error while uploading the file: %@", [error description]);
}
}];
[uploadTask resume];
return YES;
}
错误:
There was an error while uploading file: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0x6000000e8700 {NSUnderlyingError=0x60000005c0e0 "The request timed out.", NSErrorFailingURLStringKey=http://IP_ADDRESS:3000/upload/thefile, NSErrorFailingURLKey=http://IP_ADDRESS:3000/upload/thefile, NSLocalizedDescription=The request timed out.}
在互联网searchnig此之后,我已经看到了很多的实现,MIME类型更改为应用程序/八位字节流和其他东西,但没有奏效。
还添加了AFNetworkActivityLogger并注册到NSNotificationCenter检查要求:
Request: <NSMutableURLRequest: 0x600000014680> { URL: http://IP_ADDRESS:3000/upload/thefile }
2014-05-28 03:03:16.112 MyMacApp[5092:303] POST 'http://IP_ADDRESS:3000/upload/thefile': {
"Accept-Language" = "en;q=1, ja;q=0.9, fr;q=0.8, de;q=0.7, es;q=0.6, it;q=0.5";
"Content-Length" = 817739;
"Content-Type" = "multipart/form-data; boundary=Boundary+E25BB25240379DA8";
"User-Agent" = "MyMacApp/1.1 (Mac OS X Version 10.9.3 (Build 13D65))";
"X-thapikey" = 9e301234;
} (null)
我能看到的Content-Type看起来不错,有一个内容长度。
编辑:抛出的服务器异常:
java.lang.NullPointerException
at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:997)
at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:901)
at java.io.InputStream.read(InputStream.java:101)
at org.apache.commons.fileupload.util.Streams.copy(Streams.java:101)
at org.apache.commons.fileupload.util.Streams.copy(Streams.java:70)
at org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:589)
at org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:613)
at org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:630)
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:1018)
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:998)
at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310)
at ring.middleware.multipart_params$file_item_seq.invoke(multipart_params.clj:39)
at ring.middleware.multipart_params$parse_multipart_params.invoke(multipart_params.clj:55)
at ring.middleware.multipart_params$multipart_params_request.doInvoke(multipart_params.clj:81)
at clojure.lang.RestFn.invoke(RestFn.java:423)
at ring.middleware.multipart_params$wrap_multipart_params$fn__853.invoke(multipart_params.clj:107)
at ring.middleware.flash$wrap_flash$fn__1860.invoke(flash.clj:31)
at ring.middleware.session$wrap_session$fn__1847.invoke(session.clj:85)
at ring.middleware.json$wrap_json_body$fn__623.invoke(json.clj:21)
at ring.middleware.json$wrap_json_response$fn__634.invoke(json.clj:42)
at clojure.lang.Var.invoke(Var.java:415)
at org.httpkit.server.HttpHandler.run(RingHandler.java:91)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
任何想法如何调试,并找出为什么我的请求失败的原因?
服务器接受的文件,它与其他客户端,邮递员,可可REST客户端进行测试。
谢谢。