|
|
@@ -9,6 +9,9 @@
|
|
|
#import "NetworkUtils.h"
|
|
|
#import "RAUtils.h"
|
|
|
#import "Reachability.h"
|
|
|
+#import "RANetworkTaskDelegate.h"
|
|
|
+
|
|
|
+#define BOUNDARY @"AaB03x"
|
|
|
|
|
|
@implementation NetworkUtils
|
|
|
|
|
|
@@ -276,5 +279,104 @@ repeat:
|
|
|
NSMutableDictionary* jsobj = [@{@"result":@"2"} mutableCopy];
|
|
|
return jsobj;
|
|
|
}
|
|
|
++ (void)upload:(NSString *)filePath Params:(NSDictionary *)params ToHost:(NSString *)urlString Result:(resultHandler)r Progress:(progressHandler)p DecryptHandler:(id (^)(NSString *))decrypt {
|
|
|
+
|
|
|
+
|
|
|
+ NSString *fileName = [filePath lastPathComponent];
|
|
|
+
|
|
|
+ NSMutableData *dataM = [NSMutableData data];
|
|
|
+
|
|
|
+ NSMutableString *stringM = [NSMutableString string];
|
|
|
+
|
|
|
+ for (NSString *key in params) {
|
|
|
+
|
|
|
+ [stringM appendString:[NSString stringWithFormat:@"--%@\r\n",BOUNDARY]];
|
|
|
+ [stringM appendFormat:@"Content-Type: text/plain; charset=UTF-8\r\n"];
|
|
|
+ [stringM appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key];
|
|
|
+ [stringM appendFormat:@"%@\r\n",[params objectForKey:key]];
|
|
|
+ }
|
|
|
+
|
|
|
+ [stringM appendString:[NSString stringWithFormat:@"--%@\r\n",BOUNDARY]];
|
|
|
+
|
|
|
+ [stringM appendFormat:@"Content-Disposition: form-data; name=\"upfile\"; filename=%@\r\n",fileName];
|
|
|
+ [stringM appendString:@"Content-Type: application/mac-binary\r\n"];
|
|
|
+ [stringM appendString:@"\r\n"];
|
|
|
+
|
|
|
+ NSData *stringM_data = [stringM dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
+ [dataM appendData:stringM_data];
|
|
|
+
|
|
|
+ NSData *file_data = [NSData dataWithContentsOfFile:filePath];
|
|
|
+ [dataM appendData:file_data];
|
|
|
+
|
|
|
+ NSString *end = [NSString stringWithFormat:@"\r\n--%@--",BOUNDARY];
|
|
|
+ [dataM appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];
|
|
|
+
|
|
|
+ // Data
|
|
|
+ NSData *data = dataM;
|
|
|
+
|
|
|
+
|
|
|
+ // 可变请求
|
|
|
+ NSURL *url = [NSURL URLWithString:urlString];
|
|
|
+ NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:url
|
|
|
+ cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:JSON_TIMEOUT];
|
|
|
+ // line note
|
|
|
+ requestM.HTTPMethod = @"POST";
|
|
|
+
|
|
|
+ // request header
|
|
|
+ [requestM addValue:@"close" forHTTPHeaderField:@"Connection"];
|
|
|
+
|
|
|
+ [requestM addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",BOUNDARY] forHTTPHeaderField:@"Content-Type"];
|
|
|
+
|
|
|
+ [requestM addValue:[NSString stringWithFormat:@"%lu", (unsigned long)[data length]] forHTTPHeaderField:@"Content-Length"];
|
|
|
+
|
|
|
+ // request body
|
|
|
+ requestM.HTTPBody = data;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ NSURLSession *urlSession = [self standSession];
|
|
|
+
|
|
|
+ if (urlSession.delegate) {
|
|
|
+ if ([urlSession.delegate isKindOfClass:[RANetworkTaskDelegate class]]) {
|
|
|
+
|
|
|
+ RANetworkTaskDelegate *delegate = (RANetworkTaskDelegate *)urlSession.delegate;
|
|
|
+
|
|
|
+ if (p) {
|
|
|
+ delegate.p = p;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (r) {
|
|
|
+ delegate.r = r;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (decrypt) {
|
|
|
+ delegate.decryptHandler = decrypt;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ NSURLSessionDataTask *dataTask = [urlSession uploadTaskWithRequest:requestM fromData:data];
|
|
|
+
|
|
|
+ [dataTask resume];
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
+
|
|
|
+
|
|
|
++ (NSURLSession *)standSession {
|
|
|
+ NSURLSession *session = nil;
|
|
|
+
|
|
|
+ RANetworkTaskDelegate *delegate = [RANetworkTaskDelegate sharedInstance];
|
|
|
+
|
|
|
+ NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
|
|
|
+ config.timeoutIntervalForRequest = JSON_TIMEOUT;
|
|
|
+
|
|
|
+ NSOperationQueue *queue = [[NSOperationQueue alloc] init];
|
|
|
+
|
|
|
+ session = [NSURLSession sessionWithConfiguration:config delegate:delegate delegateQueue:queue];
|
|
|
+
|
|
|
+ return session;
|
|
|
+}
|
|
|
@end
|