首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSData appendData: UIImageJPEGRepresentation()返回零

NSData appendData: UIImageJPEGRepresentation()返回零
EN

Stack Overflow用户
提问于 2013-08-02 14:23:41
回答 3查看 2.5K关注 0票数 1

这让我抓挠了一段时间。

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

代码语言:javascript
复制
[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

编辑

在经历了一段时间的失败之后,我意识到它肯定是在发布这张照片。

代码语言:javascript
复制
NSLog(@"postData = %@",[postData length]);

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-05 10:10:19

解决办法:

代码语言:javascript
复制
[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]];

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

票数 1
EN

Stack Overflow用户

发布于 2013-08-02 15:14:03

  1. UIImageJPEGRepresentation(image, 1.0)返回不能转换为NSString的NSData对象。jpeg不包含有效字符。任意数据不能转换为有效的字符串。
  2. 即使UIImageJPEGRepresentation(image, 1.0)返回零,[NSData dataWithData:]调用也确保您附加到postData的数据不是零。[NSData dataWithData:nil];返回一个空的NSData实例,而不是零。
  3. 关于你的回答。0不是有效的字符串编码。编译器应该显示一个警告,并且您应该在控制台中看到一个警告:“检测到不正确的NSStringEncoding值0x0000。假设NSASCIIStringEncoding.将在不久的将来停止这种兼容映射行为”。

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

票数 1
EN

Stack Overflow用户

发布于 2015-05-18 05:18:02

你怎么告诉postData是空的?请注意,您不能使用下面的某些类别/扩展将其转换为UTF8字符串。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18019312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档