2011-09-12 8 views
0

安らかではない.Netを実行しているWebサーバーに画像を送信したいと思います。ASIHTTPRequestの生データを印刷するには

イメージを文字列に変換して送信しようとしました。エンコーディング:initWithData用いて同様
も及び、この問題

iPhone to MS SQL Image Data Type Conversion Question

しかし、運に示す方法によりbase64encodedstringに画像データを変換して、それを試してみました。

私はFacebookの壁に画像をアップロードするためにfacebook apiで見ることを考えました。これは画像をチュートリアル使い方
は、Facebookの

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

にアップロードすることができますしかし、問題は、Facebookの壁にデータを送信するためにasihttprequestを使用していて、私がアップロードされますリクエストに生のデータを見ることができませんイメージ。誰も私を助けることができます。

+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];そこ

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を使用した後、私はこのスニペットを使用してサーバに画像を送っ:

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

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

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

    [request setTimeOutSeconds:20]; 


    [request startSynchronous]; 

それは私のためにうまく働きました。それがあなたにも役立つことを願っています。

データは文字列形式で渡され、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エンドで処理する必要があります。私はいくつかの助けをしてくれてうれしいです。 –

関連する問題