我使用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)}
我在项目中添加了一个图像。但为什么找不到文件?我在模拟器中运行。
答案 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 下勾选小方框。这将确保图像在构建时成为应用程序的一部分。