Ray Zhang 9 лет назад
Родитель
Сommit
a8c9c1771a

+ 7 - 0
RedAnt ERP Mobile/common/NetworkUtils.h

@@ -11,8 +11,15 @@
 typedef NSMutableDictionary*(^resultBlock)(NSMutableDictionary* result);
 typedef NSMutableDictionary*(^decryptBlock)(NSMutableDictionary* result);
 
+
+typedef void(^resultHandler)(NSMutableDictionary *result);
+typedef void(^progressHandler)(double progress);
+
 @interface NetworkUtils : NSObject
 +(bool) IsNetworkAvailable;
 +(NSData*)get_json : (NSString*) url parameters:(NSMutableDictionary *) params file:(NSString*)file_path err_recorder:(NSString* )recorder_url result_handler:(resultBlock)resultBlock decrypt_handler:(decryptBlock)decryptBlock;
 +(NSDictionary*)err_log:(NSString*) up_params result:(NSString*)result module:(NSString*) module code:(int) code;
+
+
++ (void)upload:(NSString *)filePath Params:(NSDictionary *)params ToHost:(NSString *)url Result:(resultHandler)r Progress:(progressHandler)p DecryptHandler:(id(^)(NSString *result))decrypt;
 @end

+ 102 - 0
RedAnt ERP Mobile/common/NetworkUtils.m

@@ -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

+ 1 - 0
RedAnt ERP Mobile/common/const.h

@@ -72,6 +72,7 @@
 #define RESULT_UPDATE_USERAUTH_ERROR	 -11
 #define RESULT_SESSION_EXPIRED			  -13
 #define RESULT_VER_LOW                   -15
+#define RESULT_BACKEND_CRASH                   -20
 #define RESULT_TIMEOUT                   99
 
 #define RESULT_LOGIN_DEVICE                   -18