gpt4 book ai didi

ios - 将 UIImage 中的图像作为 JPEG 与其他 POST 数据一起上传

转载 作者:可可西里 更新时间:2023-11-01 05:42:42 27 4
gpt4 key购买 nike

我正在使用此网络服务制作网络服务和 iOS 应用程序。 Web 服务的 API 接受带有两个 POST 变量的 HTTP POST 请求:

  1. picture[title] 图片的标题
  2. picture[picture] 图片数据本身

现在使用 HTML 这不是问题,因为网络浏览器会构造请求,我唯一需要担心的是 enctype="multipart/form-data"

但是对于 iOS 应用程序,我有两个问题,还有两个我现在要问的问题。

  1. 如何将图像选择器或相机中的 UIImage 转换为原始 JPEG 数据?
  2. 如何使用正确的 POST 数据生成 NSURLRequest,其中必须包含 picture[title] 纯文本字段和 picture[picture] 字段JPEG 数据?在服务器端,我使用 Paperclip gem,与 PHP 的 $_FILES 相当。

我看过一些上传图片的示例,但这只包含图片,不包含其他 POST 变量。

谁能帮帮我?谢谢。

最佳答案

查看本教程,非常不错:

http://iphone.zcentric.com/2008/08/29/post-a-uiimage-to-the-web/

有一件事不太正确,它会将 90 作为质量设置传递给 UIImageJPEGRepresentation,它实际上将质量作为 0.0 和 1.0 之间的 float ,因此应该改为 0.9。我确定代码有效,它只是指定 100% 质量而不是可能预期的 90%。而且,为了方便起见,以防万一链接断开,这里是相关代码(为了清晰起见并更好地适应问题而重构):

- (void)uploadImage:(UIImage *)image toURL:(NSURL *)url withTitle:(NSString *)title {

// encode the image as JPEG
NSData *imageData = UIImageJPEGRepresentation(image, 0.9);

// set up the request
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:url];

// create a boundary to delineate the file
NSString *boundary = @"14737809831466499882746641449";
// tell the server what to expect
NSString *contentType =
[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];

// make a buffer for the post body
NSMutableData *body = [NSMutableData data];

// add a boundary to show where the title starts
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary]
dataUsingEncoding:NSASCIIStringEncoding]];

// add the title
[body appendData:[
@"Content-Disposition: form-data; name=\"title\"\r\n\r\n"
dataUsingEncoding:NSASCIIStringEncoding]];
[body appendData:[title
dataUsingEncoding:NSASCIIStringEncoding]];

// add a boundary to show where the file starts
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary]
dataUsingEncoding:NSASCIIStringEncoding]];

// add a form field
[body appendData:[
@"Content-Disposition: form-data; name=\"picture\"; filename=\"image.jpeg\"\r\n"
dataUsingEncoding:NSASCIIStringEncoding]];

// tell the server to expect some binary
[body appendData:[
@"Content-Type: application/octet-stream\r\n"
dataUsingEncoding:NSASCIIStringEncoding]];
[body appendData:[
@"Content-Transfer-Encoding: binary\r\n"
dataUsingEncoding:NSASCIIStringEncoding]];
[body appendData:[[NSString stringWithFormat:
@"Content-Length: %i\r\n\r\n", imageData.length]
dataUsingEncoding:NSASCIIStringEncoding]];

// add the payload
[body appendData:[NSData dataWithData:imageData]];

// tell the server the payload has ended
[body appendData:
[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary]
dataUsingEncoding:NSASCIIStringEncoding]];

// add the POST data as the request body
[request setHTTPMethod:@"POST"];
[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];

NSLog(@"%@", returnString);
}

我实际上并没有像这里写的那样编译它,所以它可能包含一些问题。

在 PHP 中,您应该看到 $_REQUEST['title'] 和 $_FILES['picture'] 已设置。

关于ios - 将 UIImage 中的图像作为 JPEG 与其他 POST 数据一起上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4541304/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com