Загрузка файла через HTTP / HTTPS и / или FTP / FTPS на Mac - PullRequest
1 голос
/ 22 мая 2009

Я нашел множество примеров загрузки файла на веб-сервер через C ++ в Windows.

Однако я борюсь за лот поиска (и я думал, что у меня все хорошо с Google!), Чтобы найти какие-либо примеры, которые помогут мне добиться того же на Mac.

Может кто-нибудь подсказать мне, как загрузить файл на веб-сервер в Mac OS, используя C ++ или цель C?

Это может быть либо HTTP / HTTPS , либо FTP / FTPS (или оба).

Спасибо!

Ответы [ 3 ]

3 голосов
/ 22 мая 2009

Вы можете использовать 'libcurl', см. эту статью в Википедии.

1 голос
/ 22 мая 2009

Вы хотели бы использовать NSURLConnection с NSMutableURLRequest, что-то вроде этого:

NSMutableURLRequest *theRequest=[[NSMutableURLRequest alloc] init];
[theRequest addValue:@"attachment;filename=\"file2.gif\"" forHTTPHeaderField:@"Content-disposition"];
[theRequest addValue:@"image/gif" forHTTPHeaderField:@"Content-Type"];
[theRequest addValue:@"binary" forHTTPHeaderField:@"Content-Transfer-Encoding"];
[theRequest setHttpBody:myBodyNSDataObject];
// create the connection with the request
// and start loading the data
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
    // Create the NSMutableData that will hold
    // the received data
    // receivedData is declared as a method instance elsewhere
    receivedData=[[NSMutableData data] retain];
} else {
    // inform the user that the download could not be made
}

Вы можете изменить или установить заголовки, используя метод NSMutableURLRequest:

- (void)addValue:(NSString *)value forHTTPHeaderField:(NSString *)field

Ответом будет то, с чем сервер вернется. Вы можете проверить документацию Apple для остальных методов делегата, которые нужно реализовать, чтобы получить тело ответа обратно. У вас должен быть объект NSData, представляющий содержимое файла, который вы хотите загрузить готовым. Делать то же самое с использованием FTP немного сложнее, но это подойдет для размещения тела файла. Вы хотите убедиться, что ваш объект NSData настроен как тело сообщения HTTP, так что вы устанавливаете заголовки как:

[theRequest addValue:@"attachment;filename=\"file2.gif\"" forHTTPHeaderField:@"Content-disposition"];
[theRequest addValue:@"image/gif" forHTTPHeaderField:@"Content-Type"];
[theRequest addValue:@"binary" forHTTPHeaderField:@"Content-Transfer-Encoding"];

И тогда вы должны добавить тело. На стороне сервера вы можете получить имя файла и байты, составляющие файл.

Это не совсем тот код, который вы должны использовать, но он должен дать вам хорошее представление о том, как действовать.

1 голос
/ 22 мая 2009

Комплект подключения может быть тем, что вы ищете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...