Файл Загрузить изображение с кодом файла в Objective C iOS

Я новичок в разработке приложений для iOS, я просто хочу загрузить файл изображения с помощью NSMutableURLRequest. Тело запроса должно быть включено с изображением. Я просто хочу отправить изображение, как показано ниже, как Java-код

 HttpPut mCreatePost = new HttpPut(params[0]+"/data");
 FileEntity fileEntity = new FileEntity(uploadFile, "image/jpeg");
 mCreatePost.setEntity(fileEntity);
 mHttpClient.execute(mCreatePost);

Пожалуйста, помогите мне написать код Objective C, как указано выше. Заранее спасибо.

1 ответ

Процесс

  1. Сделать NSMutableURLRequest
  2. Установите URL для NSMutableURLRequest
  3. Установить метод HTTP для NSMutableURLRequest
  4. Установить поля заголовка для NSMutableURLRequest
  5. Установить HTTP тело для NSMutableURLRequest. Это будет включать в себя файл изображения и любые другие параметры (пример кода ниже)
  6. Инициализируйте ранее объявленный объект NSMutableData. Это используется для хранения ответа от сервера (пример кода ниже)
  7. Инициализируйте ранее объявленный объект NSURLConnection и установите его делегат. В примере кода я сделал тот же класс, что и делегат, и реализовал методы делегата.

Образец кода

- (void)uploadImage    
    NSString *urlStr = @"your link to the server";

        NSMutableURLRequest *urlRequest = [[[NSMutableURLRequest alloc] init] autorelease];
        [urlRequest setURL:[NSURL URLWithString:urlStr]];

        [urlRequest setHTTPMethod:@"POST"];

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

        NSMutableData *postData = [NSMutableData data];

        NSString *filePath = @"path to file you want to upload";

            NSData *zipData = [NSData dataWithContentsOfFile:filePath];
            if(zipData != nil){
                [postData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", myboundary] dataUsingEncoding:NSUTF8StringEncoding]];
                [postData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n", @"file.zip"]dataUsingEncoding:NSUTF8StringEncoding]];
                [postData appendData:[[NSString stringWithFormat:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
                [postData appendData:[NSData dataWithData:zipData]];
            }


        NSString *params =@"Any other parameters you want to send with the file";

            NSLog(@"%@",params);
            [postData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", myboundary] dataUsingEncoding:NSUTF8StringEncoding]];
            [postData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", @"params"] dataUsingEncoding:NSUTF8StringEncoding]];
            [postData appendData:[[NSString stringWithFormat:@"%@", params] dataUsingEncoding:NSUTF8StringEncoding]];


        [postData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", myboundary] dataUsingEncoding:NSUTF8StringEncoding]];

        [urlRequest setHTTPBody:postData];

        [urlRequest setValue:[SettingsDataStore getSharedInstance].cooike forHTTPHeaderField:@"Cookie"];

        responsedata = [[NSMutableData alloc] initWithData:nil];
        conn =  [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];

    }

    //NSURLConnection Delegate

    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
        [responsedata appendData:data];
    }
    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
        NSLog(@"error occured %@", [error localizedDescription]);
        [responseData release];
        [conn release];


    }

    - (void)connectionDidFinishLoading:(NSURLConnection *)connection {

        //Do something with responseData and release it

        [responseData release];
        [conn release];

    }
Другие вопросы по тегам