Как распечатать необработанные данные ASIHTTPRequest - PullRequest
0 голосов
/ 12 сентября 2011

Я хочу отправить изображение на веб-сервер под управлением .Net, который не является Restful.

Я много раз пытался преобразовать изображение в строку и затем отправить его.
Как при использованииinitWithData: encoding: и также попытался преобразовать данные изображения в base64encodedstring по методу, приведенному в этом вопросе

Вопрос преобразования типа данных изображения iPhone в MS SQL

Ноне повезло.

Тогда я подумал о том, чтобы посмотреть на api 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, и я не вижу необработанных данных в запросе при загрузке изображения.Кто-нибудь может мне помочь.

1 Ответ

2 голосов
/ 12 сентября 2011

Я попробовал это на моем конце. Сначала я преобразовал в 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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...