这让我抓了很长时间。
我正在准备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文件返回数组{}
。
答案 0 :(得分:1)
UIImageJPEGRepresentation(image, 1.0)
返回无法转换为NSString的NSData对象。 jpeg不包含有效字符。并且任意数据都无法转换为有效字符串。
即使UIImageJPEGRepresentation(image, 1.0)
返回nil,[NSData dataWithData:]
调用也会确保附加到postData的数据不是nil。 [NSData dataWithData:nil];
返回一个空的NSData实例,而不是nil。
关于你的答案。 nil不是有效的字符串编码。编译器应该显示警告,你应该在控制台中看到一个警告“检测到错误的NSStringEncoding值0x0000。假设NSASCIIStringEncoding。将在不久的将来停止这种兼容性映射行为。”
您无法将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
}
}