Iphone NSData appendData:UIImageJPEGRepresentation()返回零
这让我抓挠了好一阵子 我正在准备一个Iphone NSData appendData:UIImageJPEGRepresentation()返回零,iphone,ios,objective-c,nsdata,Iphone,Ios,Objective C,Nsdata,这让我抓挠了好一阵子 我正在准备一个UIImage作为HTTP请求的一部分发布。我使用以下代码执行此操作: [postData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [postData appendData:[[NSString stringWithFormat:@"Content
UIImage
作为HTTP请求的一部分发布。我使用以下代码执行此操作:
[postData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition: attachment; name=\"q%@\"; filename=\".jpg\"\r\n" , key] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[NSData dataWithData:UIImageJPEGRepresentation(image, 1.0)]];
[postData appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
我遇到的问题是,在运行这些行之后,postData
是null
使用NSLog
我发现[postdataappenddata:[nsdatadatawithdata:uiimagejpegresentation(image,1.0)]代码>是导致此情况发生的行。然后我继续查看图像是否是问题所在UIImageJPEGresentation(image,1.0)
将大量数据输出到控制台,并将图像添加到UIImageView
显示我所期望的.jpg
我完全被迷惑了。请帮助><
编辑
在经历了下面的一点失败之后,我意识到它肯定是在发布图片
.
显示280861(字节?),但带有
的PHP文件返回数组{}
UIImageJPEGRepresentation(图像,1.0)
返回无法转换为NSString的NSData对象。jpeg不包含有效字符。并且无法将任意数据转换为有效字符串
即使uiimagejpegresentation(image,1.0)
返回nil,调用[NSData dataWithData::
也会确保附加到postData的数据不是nil<代码>[NSData DATA WITHDATA:nil]返回一个空的NSData实例,而不是nil
关于你的回答。nil不是有效的字符串编码。编译器应该显示一条警告,并且您应该在控制台中看到一条警告“检测到错误的NSStringEncoding值0x0000。假设NSASCIIStringEncoding。将在不久的将来停止此兼容性映射行为。”
无法将postData
转换回NSString。如果要检查图像是否是NSData对象的一部分,可以查看postData的长度。通过以下方式解决:
[postData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\";\r\nfilename=\"%@.jpeg\"\r\nContent-Type: image/jpeg\r\n\r\n", key,key] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[NSData dataWithData:imageData]];
[postData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
我已经包含的数据之后的第一个换行符似乎已经解决了这个问题您是如何告诉postData
为空的?请注意,您不能使用以下类别/扩展将其转换为UTF8字符串
扩展NSData{
func to_string(编码:UInt=NSUTF8StringEncoding)->string{
将NSString(数据:self,编码:encoding)返回为?字符串
}
}
如何创建postData
实例?NSString jsonString=[[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];NSStringpost=[NSString stringWithFormat:@“&json=%@”,jsonString];NSMutableData*postData=[NSMutableData dataWithData:[post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO]];UIImage*image=xxxxx刚刚注意到这是ASCII,其余是UTF8。我改变了这一点,但并没有改进,只是为了实验:改为尝试UIImagePNGRepresentation。我已经尝试过了,同样的结果:(好的,谢谢你的澄清。不过我仍然有这个脚本的问题。我有一个PHP脚本,它只执行
,返回一个空数组。这意味着数据仍然没有正确发布。我将在OP中发布我的完整代码。)
[postData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\";\r\nfilename=\"%@.jpeg\"\r\nContent-Type: image/jpeg\r\n\r\n", key,key] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[NSData dataWithData:imageData]];
[postData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];