Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用NSMutableURLRequest进行网络上传?_Php_Objective C_Afnetworking 2 - Fatal编程技术网

Php 使用NSMutableURLRequest进行网络上传?

Php 使用NSMutableURLRequest进行网络上传?,php,objective-c,afnetworking-2,Php,Objective C,Afnetworking 2,我正在努力学习AFNetworking,我从他们的Github上取了一个样本。我不知道使用php在dataToPost中设置什么参数。我不熟悉Objective-C和php。有人能看看我的代码片段和我的php,看看我遗漏了什么吗。很难找到AFNetworking的“上传”教程,但是有大量的JSON教程 我想使用NSMutableURLRequest,因为最终我想从数组或UITableview上传;以下是迄今为止的mt代码: PHP: 谢谢你的帮助和解释。谢谢大家! 您的PHP正在查找字段名use

我正在努力学习AFNetworking,我从他们的Github上取了一个样本。我不知道使用
php
dataToPost
中设置什么参数。我不熟悉
Objective-C
php
。有人能看看我的代码片段和我的
php
,看看我遗漏了什么吗。很难找到
AFNetworking
的“上传”教程,但是有大量的
JSON
教程

我想使用
NSMutableURLRequest
,因为最终我想从数组或
UITableview
上传;以下是迄今为止的mt代码:

PHP:


谢谢你的帮助和解释。谢谢大家!

您的PHP正在查找字段名
userfile
,但您的Objective-C正在使用
附件
。两个平台上必须使用相同的字段名。我还假设“
根据您更新的代码示例和报告的警告/错误,我有一些观察:

  • 您收到的消息是关于
    multipartFormRequestWithMethod
    被弃用,因为您使用的格式副本没有
    error
    参数,但已被另一个带有此附加参数的格式副本替换。有关详细信息,请参阅
    AFURLRequestSerialization.h
    中此方法的声明信息

  • 关于
    text/html
    的错误是因为PHP发送的响应的标题报告了
    text/html
    内容类型。如果您的PHP脚本没有在PHP中发送JSON,您必须更改Objective-C代码,以便它知道需要HTTP响应(默认情况下,它希望返回JSON):

    这告诉
    AFHTTPRequestOperationManager
    接受来自服务器的任何HTTP响应

    或者,如果您将PHP更改为返回JSON(您应该这样做,IMHO),那么您不仅需要将PHP代码更改为
    echo
    结果的
    JSON_encode
    ,还需要通知PHP在标题中指定适当的
    内容类型,在PHP代码中添加以下行:

    header("Content-Type: application/json");
    
  • 你说:

    我认为内容类型是在
    mimetype

    mimetype
    为多部分请求的该部分定义了
    内容类型
    。但是整个请求也有自己的
    内容类型
    头。响应的头中还带有
    内容类型
    设置。此错误告诉您响应具有
    内容类型
    文本/html
    ,它需要
    application/json
    (请参阅我前面关于修复该问题的观点)


  • 谢谢你回复我。我应该在
    参数:dataToPost
    中传递什么?谢谢!我想使用
    nil
    ,但不想急于下结论。如果我查询MYSQL并且需要“用户名”和“密码”,是否会使用参数“在URL中?我需要将
    附件
    更改为
    用户文件
    ?那么
    formdata
    中的
    fileName
    又有什么关系呢?它只是一个占位符,对吗?Xcode说
    multipartFormRequestWithMethod
    被折旧了?我用错误和修复代码编辑了我的问题。好的,谢谢。我将研究
    AFURLRequestSerialization.h
    同时,在我的回答中更新了PHP。我还没有测试过它,但随便看一眼,PHP看起来相当不错。请查看上面的内容。我不再在乎太大了,因为从设备上看,它的大小总是一样的。如果你想小心一些恶意用户注意到上传文件的URL并决定将一个2 gb的文件上传到你的服务器上,那么太大的检查是很重要的。这就是为什么它通常存在的原因;尽量减少被恶棍虐待的机会。在你的测试中没有什么大不了的,但是在你去生产之前,考虑把代码添加进去(但是用JSON响应)。是的很好……我添加了一个for循环,看看我是否可以上传2 +图像,而且效果很好。关于文件大小,你是怎么说的?@Rob将PHP更新为我解释的JSON/size错误。看起来怎么样?
    // 1. Create AFHTTPRequestSerializer which will create your request.
    AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer];
    
    // 2. Create an NSMutableURLRequest.
    NSMutableURLRequest *request =
    [serializer multipartFormRequestWithMethod:@"POST" URLString:@"http://my.com/upload/upload.php"
                                    parameters:nil
                     constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
                         [formData appendPartWithFileData:imageData
                                                     name:@"userfile"
                                                 fileName:@"myimage.jpg"
                                                 mimeType:@"image/jpeg"];
                     }];
    
    // 3. Create and use AFHTTPRequestOperationManager to create an AFHTTPRequestOperation from the NSMutableURLRequest that we just created.
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    AFHTTPRequestOperation *operation =
    [manager HTTPRequestOperationWithRequest:request
                                     success:^(AFHTTPRequestOperation *operation, id responseObject) {
                                         NSLog(@"Success %@", responseObject);
                                     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                         NSLog(@"Failure %@", error.description);
                                     }];
    
    // 4. Set the progress block of the operation.
    [operation setUploadProgressBlock:^(NSUInteger __unused bytesWritten,
                                        NSInteger totalBytesWritten,
                                        NSInteger totalBytesExpectedToWrite) {
        NSLog(@"Wrote %ld/%ld", (long)totalBytesWritten, (long)totalBytesExpectedToWrite);
    }];
    
    // 5. Begin!
    [operation start];
    
    2014-03-31 15:37:46.921 TestingUpload[7190:60b] Wrote 32768/59063
    2014-03-31 15:37:46.922 TestingUpload[7190:60b] Wrote 59063/59063
    2014-03-31 15:37:46.923 TestingUpload[7190:60b] Wrote 32768/59063
    2014-03-31 15:37:46.923 TestingUpload[7190:60b] Wrote 59063/59063
    2014-03-31 15:37:46.925 TestingUpload[7190:60b]     Success {
        canupload = 1;
        code = 0;
        maxsize = 32M;
        message = success;
        postsize = 32M;
        success = 1;
        tempdir = "/Applications/MAMP/tmp/php";
    }
    2014-03-31 15:37:46.927 TestingUpload[7190:60b]     Success {
        canupload = 1;
        code = 0;
        maxsize = 32M;
        message = success;
        postsize = 32M;
        success = 1;
        tempdir = "/Applications/MAMP/tmp/php";
    }
    
    $result = array("success" => true, "code" => 0, "message" => "success");
    
    $result = array("success"   => true,
                    "code"      => 0,
                    "message"   => "success",
                    "postsize"  => $postsize,
                    "canupload" => $canupload,
                    "tempdir"   => $tempdir,
                    "maxsize"   => $maxsize);
    
    $result = array("success" => false, "code" => 1, "message" => "file not found");
    
    $result = array("success" => false, "code" => 2, "message" => "file too large");
    
    echo json_encode($result);
    
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    
    header("Content-Type: application/json");