繁体   English   中英

使用AF网络以多部分格式上传图像在iOS中不起作用

[英]Image upload in multipart format using AFnetworking not working in ios

  1. AFHTTPSessionManager用于从ios应用发布文件
  2. 服务器端使用php实现
  3. 如果文件是从Web服务器发送的,则服务器接受文件

我的iOS代码是

UIImage *image = [UIImage imageNamed:@"Fb-button"];

NSData *imageData = UIImagePNGRepresentation(image);

AFHTTPSessionManager *sessionManager  = [[AFHTTPSessionManager alloc]initWithBaseURL:@"baseurl"];

AFJSONResponseSerializer *jsonresponseSerilaizer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];

jsonresponseSerilaizer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/plain",@"text/html", nil];

sessionManager.responseSerializer = jsonresponseSerilaizer ;

[sessionManager POST:@"pathurl" parameters:Nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

    [formData appendPartWithFileData: imageData name:@"userfile" fileName:@"userfile.png" mimeType:@"png"];

} success:^(NSURLSessionDataTask *task, id responseObject) {

    NSLog(@"success");

    NSLog(@"response : %@",responseObject);

} failure:^(NSURLSessionDataTask *task, NSError *error) {

    NSLog(@"error");

    NSLog(@"error : %@",error);

}];

我在xcode中遇到的错误是可可错误3840

error : Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn't be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x79865f70 {NSDebugDescription=Invalid value around character 0., NSUnderlyingError=0x798665c0 "Request failed: bad request (400)"}

PHP代码如下

$user_image              =   $_FILES['user_image']['name'];
$config['upload_path']   = './images/User_files/';
$config['allowed_types'] = 'gif|jpg|png';
$config['file_name']     = $user_image;
$config['max_size']      = '100';
$config['max_width']     = '1024';
$config['max_height']    = '768';

$this->load->library('upload', $config);

if ( ! $this->upload->do_upload())
{
    $data["error"] = array('error' => $this->upload->display_errors());

    echo json_encode($data);
}
else
{
    $data = array('upload_data' => $this->upload->data());

    echo '{"success": "true"}';
}

而且我尝试了以下PHP代码:

if($_FILES['user_image']['size'] > 0) 
{
    $user_image = substr(number_format(time() * rand(), 0, '', ''), 0, 8);

    if (preg_match('/^image\/p?jpeg$/i', $_FILES['user_image']['type']) or 
        preg_match('/^image\/gif$/i', $_FILES['user_image']['type']) or 
        preg_match('/^image\/jpg$/i', $_FILES['user_image']['type']) or 
        preg_match('/^image\/(x-)?png$/i', $_FILES['user_image']['type'])) 
    { 
        if (preg_match('/^image\/p?jpeg$/i', $_FILES['user_image']['type'])) 
        { 
            $ext = '.jpg'; 
        } 
        else if (preg_match('/^image\/gif$/i', $_FILES['user_image']['type']))
        { 
            $ext = '.gif'; 
        }
        else if (preg_match('/^image\/jpg$/i', $_FILES['user_image']['type']))
        { 
            $ext = '.jpg'; 
        } 
        else if (preg_match('/^image\/(x-)?png$/i', $_FILES['user_image']['type'])) 
        { 
            $ext = '.png'; 
        }

        $user_image = $user_image.$ext;
        $user_imagetoStore = './images/User_files/'.$user_image;
        copy($_FILES['user_image']['tmp_name'],$user_imagetoStore);
    }
    else
    {
        $user_image= "";
    }
}

一些想法:

  1. Objective-C代码使用名为userfile字段,PHP代码段使用user_image

  2. 第二个PHP代码段不生成任何JSON响应。

  3. 我还建议:

     sessionManager.responseSerializer = [AFJSONResponseSerializer serializer]; 

    可能没关系,但是当您调用POST方法时,我也会使用nil而不是Nil

  4. 如果上述方法不起作用,我还建议您在模拟器上运行此程序,并在Charles( http://charlesproxy.com )中观看此程序,看看请求是否正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM