使用ASIHTTPRequest上传照片

时间:2012-01-17 15:59:46

标签: file-upload ios5 asihttprequest

我正在使用ASIHTTPRequest上传带有PHP的照片。事实证明PHP方面有用(我用它来安装android),而我正试图让iOS组件工作。

这是我上传的内容:

NSString *myurl = @"http://mydomain.tld/php/upload.php?casenum=";
    myurl = [myurl stringByAppendingFormat: casenumber];
    NSString *fixedURL = [myurl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSString stringWithFormat:@"%@",fixedURL];

    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

    NSData *imageData = UIImageJPEGRepresentation(image1.image, 90);
    [request setData:imageData withFileName:@"myphoto.jpg" andContentType:@"image/jpeg" forKey:@"file"];

    [request setCompletionBlock:^{
        NSString *responseString = [request responseString];
        NSLog(@"Response: %@", responseString);
    }];
    [request setFailedBlock:^{
        NSError *error = [request error];
        NSLog(@"Error: %@", error.localizedDescription);
    }];

    [request startAsynchronous];

我在互联网上找到了这个,当我运行它时,它失败并显示错误2012-01-17 10:52:16.939 MyApp[30373:707] Error: NSInvalidArgumentException

从我在网上找到的许多文档和示例中,这应该可行,但事实并非如此,正如您可以看到的那样。熨烫时有任何帮助吗?如果您需要任何其他信息,我很乐意发布。

1 个答案:

答案 0 :(得分:0)

您生成NSURL的方式似乎存在一些错误。首先,它只是需要转义的参数,而不是整个URL,所以

NSString *myurl = @"http://mydomain.tld/php/upload.php?casenum=";
myurl = [myurl stringByAppendingFormat: casenumber];
NSString *fixedURL = [myurl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

应该是

NSString *myurl = @"http://mydomain.tld/php/upload.php?casenum=";
NSString *escapedCasenumber = [casenumber stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
myurl = [myurl stringByAppendingFormat:escapedCasenumber];

其次,您正尝试将NSString分配给NSURL,所以

NSURL *url = [NSString stringWithFormat:@"%@",fixedURL];

应该是

NSURL *url = [NSURL urlWithString:myurl];

最后,传递给UIImageJPEGRepresentation的第二个参数应该是介于0.0和1.0之间的浮点值,所以我猜测

NSData *imageData = UIImageJPEGRepresentation(image1.image, 90);

应该是

NSData *imageData = UIImageJPEGRepresentation(image1.image, 0.9);

如果在这些更改后它仍然不起作用,那么就像JosephH建议并使用调试器确切地确定导致异常的行