为什么当我将 objective-c 中的数据发布到服务器时,我的 $_FILES 为空


Why keeps my $_FILES empty when I post data in objective-c to server?

我正在尝试将一段文本发布到服务器,但到目前为止没有任何运气。我所做的是使用以下代码将字符串发布到服务器。为了测试服务器是否正在获取任何数据,我使用以下方法:

<?php
     print_r($_FILES);
?>

发布字符串:

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:@"http://[webaddress]/[page].php"]];
    [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
    [request setHTTPShouldHandleCookies:NO];
    [request setTimeoutInterval:30];
    [request setHTTPMethod:@"POST"];
    NSString *boundary = @"V2ymHFg03ehbqgZCaKO6jy";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request setValue:contentType forHTTPHeaderField: @"Content-Type"];
    NSMutableData *body = [NSMutableData data];
    [body appendData:[[NSString stringWithFormat:@"--%@'r'n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name='"%@'"'r'n'r'n",@"test"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"%@'r'n",@"testvalue"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"--%@--'r'n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
           [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
           NSString *postLength = [NSString stringWithFormat:@"%d", [body length]];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody:body];
    connection=[[NSURLConnection alloc]initWithRequest:request delegate:self];
    [connection start];

在我的测试环境中,我使用真实地址,但为了安全起见,我删除了它。我使用 NSLog 返回服务器的结果(在 NSURLConnection 委托中使用)。但我的问题是_FILES美元总是空着?奇怪的是,当将以下内容与图像一起使用时,它确实给了我一些回报:

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:@"http://[webaddress]/[page].php"]];
    [request setHTTPMethod:@"POST"];
    NSString *boundary = @"---------------------------14737809831466499882746641449";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];
    NSMutableData *body = [NSMutableData data];
    [body appendData:[[NSString stringWithFormat:@"'r'n--%@'r'n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[ NSString stringWithFormat:@"Content-Disposition: form-data; name='"userfile'"; filename='"%@'"'r'n",name] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"Content-Type: application/octet-stream'r'n'r'n" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[NSData dataWithData:data]];
    [body appendData:[[NSString stringWithFormat:@"'r'n--%@--'r'n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    // setting the body of the post to the request
    [request setHTTPBody:body];
     connection=[[NSURLConnection alloc]initWithRequest:request delegate:self];
    [connection start];

因此,要上传图像(最后一段代码),$_FILES 不为空,当使用第一段代码时,它是空的。服务器工作正常,用于返回 $_FILES 的文件只是一个普通的 PHP 文件。PHP 正在工作,并且可以上传图像的事实让我认为第一段代码而不是服务器中存在错误。

所以我的问题是为什么当我上传普通字符串时 $_FILES 是空的?

文件数据/信息将以$_FILES为单位,发布的表单数据(字符串)将以$_POST为单位,或者如果您使用get方法数据,则为$_GET