Как преобразовать NSData в строку в iPhone SDK? - PullRequest
0 голосов
/ 14 апреля 2011

Я разрабатываю приложение для iPhone, в котором хранилище изображений с камер в NSData - UIImageJPEGRepresentation, теперь я хочу преобразовать эти NSData в строку. После изумления я обнаружил, что base64 сделает это.

Я хочу знать, что если я закодирую его в base64, а затем отправлю на php-сервер, то можно будет его декодировать и преобразовать в Image.

Сначала я спрашиваю здесь , как отправить изображение с координатами и описанием изображения на php-сервер, но я не могу получить ответ, поэтому теперь я думаю преобразовать изображение в base64 и затем отправить его на php-сервер с координатами и описание изображения.

Надеюсь, кто-нибудь знает решение!

Ответы [ 4 ]

0 голосов
/ 14 апреля 2011

следуйте этому коду для отправки изображений и переменных на сервер -

// Implement this method in your code to do something with the image.
- (void)useImage:(UIImage*)theImage
{
    /*
     turning the image into a NSData object
     getting the image back out of the UIImageView
     setting the quality to 90
     */

    NSData *imageData = UIImageJPEGRepresentation(theImage, 90);
    // setting up the URL to post to


    NSString *urlString=[SiteUrl    stringByAppendingString:@"iphone_upload_photo.php?type=colleague&token="];
    urlString=[urlString stringByAppendingString:PublicToken];





    // setting up the request object now
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"POST"];

    /*
     add some header info now
     we always need a boundary when we post a file
     also we need to set the content type

     You might want to generate a random boundary.. this is just the same

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

    /*
     now lets create the body of the post
     */
    NSMutableData *body = [NSMutableData data];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"ipodfile.jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[NSData dataWithData:imageData]];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    // setting the body of the post to the reqeust
    [request setHTTPBody:body];

    // now lets make the connection to the web
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

    [self LoadContent];



}
0 голосов
/ 14 апреля 2011

Посмотрите на следующий URL.Это может дать вам то, что вы ищете.

http://www.iphonedevsdk.com/forum/iphone-sdk-development/49247-posting-image-web-server-using-soap.html

0 голосов
/ 14 апреля 2011

Это не звучит хорошо для меня.Некоторые http-клиенты предоставляют хорошую поддержку для загрузки изображений.Взгляните на ASIHttpRequest .Вы можете сохранить данные во временный файл, а затем загрузить этот файл.Я раньше не использовал метод addData, похоже, вы можете напрямую загрузить объект NSData.

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request addPostValue:@"Ben" forKey:@"names"];
[request addPostValue:@"George" forKey:@"names"];
[request addFile:@"/Users/ben/Desktop/ben.jpg" forKey:@"photos"];
[request addData:imageData withFileName:@"george.jpg" andContentType:@"image/jpeg" forKey:@"photos"];
0 голосов
/ 14 апреля 2011

Base64 является стандартом и поддерживается большинством языков, включая PHP, поэтому он будет работать. Но это, вероятно, не лучший способ сделать это, так как base64 увеличивает размер полезной нагрузки на 33%. Вы должны рассмотреть возможность отправки в двоичном виде, а не в виде строки, это также будет лучше поддерживать потоковую передачу и будет использовать меньше памяти и работать быстрее как на клиенте, так и на сервере. Вы должны использовать base64 только для небольших данных или когда нет лучших вариантов.

...