目标c - ASIFormDataRequest无法从设备上传.zip文件,但在模拟器中执行此操作



我在设备中连接了wifi - 所以这被排除在外。

我执行的具有相同以下代码的应用程序能够将文件上传到iOS 4.3模拟器中的java服务器,但无法在iOS 4.3.3设备中上传。这有点奇怪。

ASIFormDataRequest *request_zip = [[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:strURL]];
[request_zip setAllowCompressedResponse:YES];
[request_zip setPostValue:@"device" forKey:@"value1"]; //pass device ID here...
//[request_zip addRequestHeader:@"Content-Type" value:@"multipart/form-data"];
[request_zip setTimeOutSeconds:20];
[request_zip setDelegate:self];
[request_zip setDidFailSelector:@selector(uploadFailed:)];
[request_zip setDidFinishSelector:@selector(uploadFinished:)];
[request_zip setFile:path forKey:path];
[request_zip startAsynchronous];
NSLog(@"%@ post length",[NSString stringWithFormat:@"%llu",[request_zip postLength]]);

执行代码时会在终端中产生以下输出。

检测到不正确的 NSString 0x0000编码值。假设 NSStringEncodingASCII。将在不久的将来停止此兼容性映射行为。

控制台中打印的帖子长度 =>

0 帖子长度

最后还有一个字符串出现,即超时消息,

请求失败: 请求因响应数据而超时

100% 确定服务器处于活动状态,并立即响应从模拟器执行的应用程序。

如何让程序在模拟器中正常运行,但不在设备中运行?

不正确的 NSString编码值 检测到0x0000。若 NSStringEncodingASCII.将阻止这种情况 兼容性映射行为在 近期。

表示您有一个没有NSStringEncoding值的NSString正在启动,请检查您的NSString调用。

ASIHTTPRequest 中的 POST 中的空体

尝试:

NSURL *requestURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@", strURL]];
ASIFormDataRequest *request_zip = [ASIFormDataRequest requestWithURL:requestURL];

NSLog将在[request_zip startAsynchronous];之后立即触发,当时可能刚刚初始化,您需要将日志请求移动到委托方法中,将其更改为[request_zip startSynchronous];,它将立即触发。

然后,您的委托方法将如下所示:

 - (void)requestStarted:(ASIHTTPRequest *)request {
   NSLog(@"%@ post length",[NSString stringWithFormat:@"%llu",[request postLength]]);
}

问题出在服务器端。ASIHTTP lib 工作正常,当 ASI 尝试将带有帖子正文的请求传输到服务器时,apache 没有正确响应,因为可能缺少其中一个服务器配置。专有网络库所有者稍后修复了它,问题解决了。

它在模拟器中工作,但在设备中不起作用,为什么?

它在模拟器中工作,因为数据是通过以太网而不是无线传输的,因此传输速率相对较高。

Web 服务开发人员必须确保数据被接收到,甚至 如果它来自低速网络

**

ASI 库返回 ASCII 编码错误,为什么?

**

一旦请求超时,ASI 会立即返回此错误。这是原因,但必须找出ASI针对此错误的真正内部问题。

非常有趣的结果在一天结束时得到了。

最新更新