2011-09-12 51 views
0

我想將圖像發送到運行.Net的Web服務器,該服務器不是Restful。如何打印ASIHTTPRequest的原始數據

我已經嘗試了很多東西把圖像轉換成字符串,然後發送它。
喜歡使用initWithData:編碼:和也與在這個問題

iPhone to MS SQL Image Data Type Conversion Question

但沒有運氣給出的方法將圖像數據轉換成base64encodedstring嘗試過。

然後我想到了在facebook上看facebook壁上的圖片。
使用本教程中,圖像可以上傳到Facebook的

http://www.raywenderlich.com/1626/how-to-post-to-a-users-wall-upload-photos-and-add-a-like-button-from-your-iphone-app

但問題是,它使用asihttprequest發在Facebook上牆的數據,我不能看到原始數據的請求將上傳圖片 。誰能幫我嗎。

+0

你是什麼意思的原始數據? ASIHTTPRequest的委託方法可以幫助您瞭解發生了什麼。 –

+0

委託方法只告訴我們它將一個文件路徑添加到數組類型的對象中,然後進行異步調用以將數據發送到Web服務器,但它並沒有告訴我們它發送數據的確切時間,例如以何種格式或者在服務器上發送什麼類型的數據。 – Robin

+1

在ASIHTTPRequestConfig.h中,將DEBUG_FORM_DATA_REQUEST設置爲1,它將調試數據記錄到控制檯。 – bbarnhart

回答

2

我在我的結尾嘗試過。首先,我轉換爲base64encoding這樣的:

NSString *str64; 

     if(Image){ 
      NSData *imageData = UIImageJPEGRepresentation(Image,0.75); 
      str64 = [imageData base64Encoding]; 
     } 

然後我加入到字典,然後添加該字典到一個數組,這樣我可以把它作爲在請求的主體中的JSON字符串。

NSMutableArray * ParaArray = [[NSMutableArray alloc] init];

ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:urlString]]; 

    [request setPostValue:[ParaArray JSONRepresentation] forKey:@"bulk_data"]; 

    //[ParaDictionary release]; 
    [ParaArray release]; 

    [request setTimeOutSeconds:20]; 


    [request startSynchronous]; 

它的工作對我罰款:

NSDictionary *ParaDictionary=[NSDictionary dictionaryWithObjectsAndKeys: 
            [NSString stringWithFormat:@"%@",Userid], @"userid", 
            [NSString stringWithFormat:@"%@",[Imagename URLEncodedString]], @"imagename", 
            [NSString stringWithFormat:@"%@",DateNTime], @"datetime", 
            [NSString stringWithFormat:@"%@",ImageLocation], @"imagelocation", 
            str64,@"image", 
            nil]; // set the parameter 


    [ParaArray addObject:ParaDictionary]; 

有使用ASIFormDataRequest後,我用這個片段發送的圖像服務器。我希望它也能幫助你。

數據以字符串形式傳遞,我們可以直接使用base64Encoding方法拷貝粘貼它們。雖然你可能知道他們仍然在這裏:

- (NSString *) base64Encoding { 
return [self base64EncodingWithLineLength:0]; 
} 

- (NSString *) base64EncodingWithLineLength:(NSUInteger) lineLength { 
const unsigned char *bytes = [self bytes]; 
NSMutableString *result = [NSMutableString stringWithCapacity:[self length]]; 
unsigned long ixtext = 0; 
unsigned long lentext = [self length]; 
long ctremaining = 0; 
unsigned char inbuf[3], outbuf[4]; 
unsigned short i = 0; 
unsigned short charsonline = 0, ctcopy = 0; 
unsigned long ix = 0; 

while(YES) { 
    ctremaining = lentext - ixtext; 
    if(ctremaining <= 0) break; 

    for(i = 0; i < 3; i++) { 
     ix = ixtext + i; 
     if(ix < lentext) inbuf[i] = bytes[ix]; 
     else inbuf [i] = 0; 
    } 

    outbuf [0] = (inbuf [0] & 0xFC) >> 2; 
    outbuf [1] = ((inbuf [0] & 0x03) << 4) | ((inbuf [1] & 0xF0) >> 4); 
    outbuf [2] = ((inbuf [1] & 0x0F) << 2) | ((inbuf [2] & 0xC0) >> 6); 
    outbuf [3] = inbuf [2] & 0x3F; 
    ctcopy = 4; 

    switch(ctremaining) { 
     case 1: 
      ctcopy = 2; 
      break; 
     case 2: 
      ctcopy = 3; 
      break; 
    } 

    for(i = 0; i < ctcopy; i++) 
     [result appendFormat:@"%c", encodingTable[outbuf[i]]]; 

    for(i = ctcopy; i < 4; i++) 
     [result appendString:@"="]; 

    ixtext += 3; 
    charsonline += 4; 

    if(lineLength > 0) { 
     if(charsonline >= lineLength) { 
      charsonline = 0; 
      [result appendString:@"\n"]; 
     } 
    } 
} 

return [NSString stringWithString:result]; 
} 
+0

我不是要求代碼將圖像傳輸到網絡服務器,我的問題是確切的數據通過互聯網發送到服務器,也可以粘貼名爲base64Encoding的方法。 – Robin

+0

數據通過互聯網以字符串的形式發送,我們可以複製粘貼base64Encoding的以下方法 - –

+0

是的,絕對是這樣。要進一步操作,您必須在Web端處理它。我很高興我有一些幫助。 –