【问题标题】:ASIFormDataRequest unable to upload .zip file from device but does it in simulatorASIFormDataRequest 无法从设备上传 .zip 文件,但可以在模拟器中上传
【发布时间】:2011-07-08 14:33:45
【问题描述】:

我在设备中连接了 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% 确保服务器处于活动状态并立即响应从模拟器执行的应用程序。

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

【问题讨论】:

  • strURL 完全没问题。当有响应时,代表也能完美执行。
  • 您发送的文件有多大?
  • 30kb 压缩和密码保护的 zip 文件。
  • 我终于认为问题出在服务器端的 java 程序中了..让我们看看..我还不太确定。
  • 我同意,你可能会想使用 Fiddler,基本上在 Fiddler 中设置一个远程代理,然后告诉你的 iPad 使用代理,一旦你这样做了,你可以看到流量,它会让调试更容易ravelrumba.com/blog/ipad-http-debugging

标签: objective-c asihttprequest ios4


【解决方案1】:

不正确的 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]]);
}

【讨论】:

  • @"file" 可以用任何字符串替换。实际上 path 是一个 NSString 变量。但同时我按照你的建议改变了:)..仍然没有工作..
  • 嗨,肖恩,感谢肖恩的回复……非常努力。正如您所说,内容长度正在正确打印。我仍然无法将文件上传到主机。我相信还有别的东西。对我来说最大的问题是,同一个程序在模拟器中执行得很好,但在设备中却没有。请帮帮我
【解决方案2】:

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

在模拟器上可以,在设备上不行,为什么?

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

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

**

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

**

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-31
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2012-03-08
    相关资源
    最近更新 更多