ASIFormDataRequest无法从设备上传.zip文件,但在模拟器中执行

时间:2011-07-08 14:33:45

标签: objective-c asihttprequest ios4

我在设备中连接了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]]);

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

  

检测到不正确的NSStringEncoding值0x0000。假设NSStringEncodingASCII。将在不久的将来停止这种兼容性映射行为。

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

  

0帖子长度

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

  

请求失败:   请求超时,响应数据

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

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

2 个答案:

答案 0 :(得分:2)

  

NSStringEncoding值不正确   检测到0x0000。假设   NSStringEncodingASCII。会阻止这个   兼容性映射行为   不久的将来。

表示您的NSString已被初始化而没有NSStringEncoding值,请检查您的NSString来电。

Empty body in POST in ASIHTTPRequest

尝试:

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]]); } 会马上开火,。

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

{{1}}

答案 1 :(得分:1)

问题在于服务器端。 ASIHTTP lib正常工作,当ASI尝试将邮件正文传输到服务器时,apache没有正确响应,因为可能缺少其中一个服务器配置。专有Web库所有者稍后修复它,问题得到解决。

  

它在模拟器中工作但在设备中没有,为什么?

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

  

Web服务开发人员必须确保即使收到数据也是如此   如果它来自低速网络

**

  

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

**

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

结束了非常有趣的结果。