1

我正在使用NSURLConnection發送相同的數據(NSString)到服務器,我想添加一個圖像或文件,所以什麼是內容類型的價值?我如何上傳文件和其他參數使用NSURLConnection

編碼

- (NSData *)encodingData:(NSMutableDictionary *)dictionary 
{ 
    NSMutableArray *arrayPosts = [[NSMutableArray alloc] init]; 
    [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
     NSString *encodedKey = [key stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
     NSString *encodedValue = [obj stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
     [arrayPosts addObject:[NSString stringWithFormat:@"%@=%@",encodedKey,encodedValue]]; 
    }]; 
    NSString *encodedArrayPosts = [arrayPosts componentsJoinedByString:@"&"]; 
    return [encodedArrayPosts dataUsingEncoding:NSUTF8StringEncoding]; 
} 

發送數據

- (void)startAsyncRequest 
{ 
    // Enable the network activity indicator in the status bar 
    [self enableActivityIndicatorInStatusBar]; 

    // Setting of the request 
    NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL:self.url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20.0]; 
    [urlRequest setHTTPMethod:self.method]; 
    [urlRequest setHTTPBody:[self encodingData:self.dictionaryPosts]]; 

    // Send the request 
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self]; 

    if (connection) { 
     // Connection succeded 
    self.receiveData = [NSMutableData data]; 
    } else { 
     // Connection Failed 
     self.error = @"Connection Failed"; 
     // Inform the user that the connection failed 
     [self.delegate requestFailed:self]; 
    } 
} 

回答

4

您需要將數據傳遞到作爲流型服務器

public InsertImage(Stream stream) 

類似的東西然後解析流類型。

這是如何使用一些邊界

- (NSURLRequest *)buildRequest:(NSData *)paramData fileName:(NSString *)name { 
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
    NSString *charset = (NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)); 
    [request setURL:self.url]; 
    [request setHTTPMethod:self.method]; 

    NSString *boundary = @"0xKhTmLbOuNdArY"; 
    NSString *endBoundary = [NSString stringWithFormat:@"\r\n--%@\r\n", boundary]; 

    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; charset=%@; boundary=%@", charset, boundary]; 
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

    NSMutableData *tempPostData = [NSMutableData data]; 
    [tempPostData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

    // Sample Key Value for data 
    [tempPostData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", @"Key_Param"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [tempPostData appendData:@"Value_Param"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [tempPostData appendData:[endBoundary dataUsingEncoding:NSUTF8StringEncoding]]; 

    // Sample file to send as data 
    [tempPostData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n", name] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [tempPostData appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [tempPostData appendData:paramData]; 
    [tempPostData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [request setHTTPBody:tempPostData]; 
    return request; 
} 

你應該在你的服務器端的流式數據,並分析它來構建你的要求,你可以得到鑰匙上的價值基礎你通過如Key_Param和您發送文件的名稱(文件名)。

+0

但我怎麼能混合他們兩個我的意思是文件和簡單的數據? –

+0

@上面的Tamim.Z代碼**數據**的示例鍵值爲簡單數據,而另一個爲文件 – dianz

相關問題