NSData appendData:UIImageJPEGRepresentation()返回nil

时间:2013-08-02 14:23:41

标签: iphone ios objective-c nsdata

这让我抓了很长时间。

我正在准备UIImage作为HTTP request的一部分发帖。我使用以下代码执行此操作:

[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我发现[postData appendData:[NSData dataWithData:UIImageJPEGRepresentation(image, 1.0)]];是造成这种情况发生的行。然后我继续看看图像是否是一个问题。 UIImageJPEGRepresentation(image, 1.0)向控制台输出大量数据,并将图像添加到UIImageView,显示我期待的.jpg。

我绝对是竹子。请帮忙>。< 小号

修改

经过一段时间的崩溃之后,我意识到它肯定会发布图像 。

NSLog(@"postData = %@",[postData length]);

显示280861(字节?)但是<?php print_r($_FILES); ?>的PHP文件返回数组{}

3 个答案:

答案 0 :(得分:1)

  1. UIImageJPEGRepresentation(image, 1.0)返回无法转换为NSString的NSData对象。 jpeg不包含有效字符。并且任意数据都无法转换为有效字符串。

  2. 即使UIImageJPEGRepresentation(image, 1.0)返回nil,[NSData dataWithData:]调用也会确保附加到postData的数据不是nil。 [NSData dataWithData:nil];返回一个空的NSData实例,而不是nil。

  3. 关于你的答案。 nil不是有效的字符串编码。编译器应该显示警告,你应该在控制台中看到一个警告“检测到错误的NSStringEncoding值0x0000。假设NSASCIIStringEncoding。将在不久的将来停止这种兼容性映射行为。”

  4. 您无法将postData转换回NSString。如果要检查图像是否是NSData对象的一部分,可以查看postData的长度。

答案 1 :(得分:1)

已解决:

[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]];

我已经包含的数据之后的第一个换行符似乎解决了这个

答案 2 :(得分:0)

你是怎么告诉postData是空的?请注意,您无法使用某些类别/扩展名将其转换为UTF8字符串,如下所示。

extension NSData { func to_string(encoding:UInt = NSUTF8StringEncoding) -> String? { return NSString(data:self, encoding:encoding) as? String } }