【问题标题】:Upload Image Using AFNetwork使用 AFNetwork 上传图像
【发布时间】:2012-10-23 13:52:30
【问题描述】:

我已经使用 AFNetwork 搜索了很多有效的上传代码,但没有运气。我想出了从 2 个不同站点获得的这段代码:

NSData *imageData = UIImagePNGRepresentation([UIImage imageNamed:@"1.png"]);
NSURL *url = [NSURL URLWithString:@"http://localhost/project"];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"upload.php" parameters:nil constructingBodyWithBlock: ^(id <AFMultipartFormData> formData) {
    [formData appendPartWithFileData:imageData name:@"google" fileName:@"1.png" mimeType:@"image/png"];
}];


AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    NSLog(@"IP Address: %@", [JSON valueForKeyPath:@"origin"]);
} failure:nil];

[operation start];

但我得到的是“IP 地址:(null)”。我的 php 方面是这样的:

function upload(){
$uploaddir = 'uploads/';
$file = basename($_FILES['file']['name']);
$uploadfile = $uploaddir . $file;

if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
    sendResponse(200, 'Upload Successful');
    return true;
}
sendResponse(403, 'Upload Failed');
    return false;
}

非常感谢您的帮助。

【问题讨论】:

    标签: php objective-c upload afnetworking


    【解决方案1】:

    这是我几天前做的。 iPhone端的代码(上传一张图片和另一个文本参数,item)

    NSString *uploadURL = @"http://www.baseurl.it/";
    NSURL *url = [[NSURL alloc]initWithString:uploadURL];
    AFHTTPClient *httpClient = [[AFHTTPClient alloc]initWithBaseURL:url];
    NSDictionary *dict = [NSDictionary
                          dictionaryWithObjects:@[self.itemValue]
                          forKeys:@[@"item"]];
    // self.itemValue is a post parameter type nsstring
    
    NSURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"path/to/page.php" parameters:dict constructingBodyWithBlock: ^(id <AFMultipartFormData> formData) {
    // self.itemData is an NSData containing the image
        if (self.itemData)
            [formData appendPartWithFileData:self.itemData name:@"imageData" fileName:@"imageData.jpg" mimeType:@"image/png"];
    }];
    
    // sorry for the formatting here, is a long method using blocks
    AFJSONRequestOperation *json = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
                                                                                   success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON){
                                                                                       NSLog(@"Upload Success");
                                                                                   }                                                                                   
                                        failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
                                                                                       NSLog(@"Error: %@", error.description);
    
                                                                                   }];
    [json start];
    

    在 PHP 方面:

    // file upload
    try {
    $fileName = $_FILES['imageData']['name'];
    $tmpName  = $_FILES['imageData']['tmp_name'];
    $fileSize = $_FILES['imageData']['size'];
    $fileType = $_FILES['imageData']['type'];
    
    $fp      = fopen($tmpName, 'r');
    $content = fread($fp, filesize($tmpName));
    $content = addslashes($content);
    fclose($fp);
    
    if(!get_magic_quotes_gpc())
    {
        $fileName = addslashes($fileName);
    }
    
    } catch (Exception $e) {
        echo json_encode("Error:".$e);
    }
    
    // $content contains your image
    

    不确定它是否没有错误,因为它取自更长的来源,所以我修改了一些代码

    【讨论】:

    • 感谢代码,只有一件事,当我使用 html 浏览器测试我的 php 代码时,我有这个:我的图片名称是 1.png。我在使用这些设置 itemData 和 dict 时遇到问题。你能帮我解决一下吗?
    • 你只需要在 NSData 中转换你的 UIImage。您可以使用 self.itemData = UIImagePNGRepresentation(yourUIImageInstance); .在我的代码中 self.itemData 是一个属性类型 NSData。
    • 你能再解释一下吗?我现在不明白你的问题。如果您想使用浏览器检查您的 php 代码,您必须使用表单和输入类型文件(您发布的行)制作一个简单的页面。 form方法是post,action是php接收页面的地址。
      url.com/upload.php"><input type="file" name="imageData">
      然后只需选择文件并上传跨度>
    • 对不起,我用浏览器检查过,没问题。现在我想知道如何用你的变量替换我的变量。就像在这段代码中一样: NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[self.itemValue] forKeys:@[@"item"]];我想知道 self.itemValue 和 item 是什么,所以我可以替换它们。同样的事情:[formData appendPartWithFileData:self.itemData name:@"imageData" fileName:@"imageData.jpg" mimeType:@"image/png"];
    【解决方案2】:

    查看我对类似问题的回答。我使用这个自定义类(由我编写(用于我的所有远程 Web 服务操作。它足够灵活,可以与图像文件数据一起发送额外的 POST 参数。processFileUploadRequestWithURL 方法是您需要的方法,其他方法)你可以用也可以不用。

    SO Post Here

    【讨论】:

    • 我在某处读到 SBJason 已被删除。对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2015-06-02
    • 2013-11-19
    相关资源
    最近更新 更多