目标C - 将图像发送了HTTP POST(Objective c - Send an image

2019-07-29 15:30发布

我想了解如何与HTTP POST和我现在的客户端 - 服务器协议设计发送图像。 所有从客户端到服务器消息看起来像下面的例子中,有一个cmd字符串参数cmd和该命令的一些更相关的参数。

例如,这是我如何发送短信到服务器:

- (void)sendMessagesWithText:(NSString *)text fromUser:(NSString *)userId
{
    NSString *url = SERVER_URL;

    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
    [request setURL:[NSURL URLWithString:url]];
    [request setHTTPMethod:@"POST"];

    NSMutableData *body = [NSMutableData data];

    [body appendData:[[NSString stringWithFormat:@"cmd=%@&userid=%@&msgtext=%@", 
                       @"sendmessage", 
                       userId,
                       text] dataUsingEncoding:NSUTF8StringEncoding]];


    [request setHTTPBody:body];

    // send to server
    [[NetworkHelper sharedManager] sendRequest:request]; 
}

现在我想使用户能够同时发送图像,但我怎么跟我的协议设计发送? 我应该只是追加图像身体CMD字符串后?

Answer 1:

你需要用后的multipart / form-data的。

下面是现已解散的ASI的例子: 创建和运行的请求

发送带有ASIFormDataRequest表单POST

为了在网页表单兼容的方式发送POST数据,使用附带的ASIFormDataRequest子类。 数据被张贴在“应用程序/ x WWW的形式进行了urlencoded”格式,或“多部分/格式数据”格式上传二进制数据或文件时。 在文件中的数据从磁盘需要被读取,因此发布会大文件就OK了,只要你的Web服务器的设置来处理它们。

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"Ben" forKey:@"first_name"];
[request setPostValue:@"Copsey" forKey:@"last_name"];
[request setFile:@"/Users/ben/Desktop/ben.jpg" forKey:@"photo"];

ASIFormDataRequest将自动检测文件的mime类型(在iOS 3.0或更高版本的苹果机)经由setFile加入到POST:forKey :,和包括此在发送到服务器的MIME头。 如果你愿意,你可以使用更长的形式覆盖此:


多部分/格式数据吸收。 相信我,我已经实现了它在C ++中若干年前。 让别人做肮脏的工作。

但是,如果你还是想单干。 我发现这个和这个 。 祝好运。



Answer 2:

您只需将图像的一个NSData版本到的POST体。

[body appendData:[[NSString stringWithFormat:@"cmd=%@&userid=%@&msgtext=%@", @"sendmessage&image=", userId, text] dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData: UIImagePNGRepresentation((UIImage *) myImage)];

但是,它可能是更容易寻找到ASIHTTPRequest ,与,你可以使用:

[request setPostValue:myImageData forKey:@"image"];


文章来源: Objective c - Send an image over http POST