2009-05-21 10 views
1

Ich habe zahlreiche Beispiele beim Hochladen einer Datei auf einen Webserver über C++ unter Windows gefunden.Hochladen einer Datei über HTTP/HTTPS und/oder FTP/FTPS auf einem Mac

Allerdings habe ich nach einem Los der Suche zu kämpfen (und ich dachte, ich war gut mit Google!), Um Beispiele zu finden, die mir helfen, das gleiche auf einem Mac zu erreichen.

Kann mir jemand auf einige Hilfe verweisen, wie man eine Datei auf einen Webserver unter Mac OS mit C++ oder Ziel C hochlädt?

Es kann über HTTP/HTTPS oder FTP/FTPS (oder beide) sein.

Danke!

Antwort

3

Sie könnten 'libcurl' verwenden, siehe this article auf Wikipedia.

1

Sie würden eine NSURLConnection mit einem NSMutableURLRequest, so etwas wie diese verwenden möchten:

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 
} 

Sie ändern können, oder setzen Header die NSMutableURLRequest Methode:

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

Die Antwort wird sein, was auch immer der Server zurückkommt. Sie können Apple's documentation für den Rest der Delegate-Methoden überprüfen, die implementiert werden, um den Hauptteil der Antwort zurückzuerhalten. Sie sollten das NSData-Objekt haben, das den Inhalt der Datei darstellt, die Sie hochladen möchten. Das Gleiche mit FTP zu tun ist etwas komplizierter, aber das wird funktionieren, um den Dateikörper hochzuladen. Sie wollen Ihre NSData Objekt, um sicherzustellen, ist wie der Körper eines HTTP-Post eingerichtet, so dass Sie die Header wie ein:

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

Und dann sollten Sie den Körper anhängen. Auf der Serverseite können Sie den Dateinamen und die Bytes erhalten, aus denen die Datei besteht.

Dies ist nicht genau der Code, den Sie verwenden sollten, aber es sollte Ihnen eine gute Idee für die weitere Vorgehensweise geben.

Verwandte Themen