asiformdatarequest上传图片,(null)没有文件存在

时间:2012-05-10 08:42:22

标签: ios upload asiformdatarequest

我使用asiformdatarequest框架上传图片,代码如下:

 NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *path1=[paths objectAtIndex:0];
    NSString *filename=[path1 stringByAppendingPathComponent:@"logo.png"];  
    NSLog(@"image path = %@",filename);
    [request setFile:[NSURL URLWithString:filename] forKey:@"avatar"];
    [request startSynchronous];

我的日志:

image path = /Users/tanlusheng/Library/Application Support/iPhone Simulator/5.1/Applications/5473E6FF-0D3A-48CD-8728-0219CF25BC80/Documents/logo.png
Error Domain=ASIHTTPRequestErrorDomain Code=6 "No file exists at (null)" UserInfo=0x6b4c610 {NSLocalizedDescription=No file exists at (null)}

我在项目中添加了一个图像。但为什么找不到文件?我在模拟器中运行。

1 个答案:

答案 0 :(得分:0)

当您尝试发送图像时,您尝试从应用程序的Documents目录发送图像,而不是主捆绑。除非您已将图像明确放置在Documents目录中(您最有可能通过代码执行此操作),否则它不会存在。

请改为尝试:

NSString *filename = [[NSBundle mainBundle] pathForResource:@"logo" ofType:@"png"];  
[request setFile:[NSURL URLWithString:filename] forKey:@"avatar"];
[request setDelegate:self]; //Make sure this class receives request alerts
[request setDidFinishSelector:@selector(someMethod:)]; //Which method to call when finished
[request startAsynchronous];

注意我还将请求更改为异步启动。您真的不想同步上传,或者您的应用程序将在请求完成之前停止执行。我还在请求完成时添加了自我委派和选择器。

然后,您可以在此处理完成的查询:

- (void)someMethod:(ASIHTTPRequest *)request
{
    NSString *response = [request responseString];
    NSLog(@"%@", response);
}

如果仍然出现空错误,请确保该图像具有目标成员资格。要执行此操作,请在Xcode中选择您的图像,并确保在右侧的 Target Membersip 下勾选小方框。这将确保图像在构建时成为应用程序的一部分。