1

这让我抓挠了很长一段时间。

我正准备将一个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]];

我遇到的问题postDatanull在运行这些行之后。

使用NSLog 我发现[postData appendData:[NSData dataWithData:UIImageJPEGRepresentation(image, 1.0)]];这是导致这种情况发生的原因。然后我继续查看图像是否有问题。 UIImageJPEGRepresentation(image, 1.0)将大量数据输出到控制台并将图像添加到UIImageView显示我期待的.jpg。

我完全被迷住了。请帮忙>.< S

编辑

在下面的一些崩溃之后,我意识到它肯定是在发布图像。

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

显示 280861(字节?),但 PHP 文件<?php print_r($_FILES); ?>返回 Array {}

4

3 回答 3

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。将在不久的将来停止这种兼容性映射行为。”。

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

于 2013-08-02T15:14:03.897 回答
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]];

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

于 2013-08-05T10:10:19.073 回答
0

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

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

于 2015-05-18T05:18:02.763 回答