Php 使用NSMutableURLRequest进行网络上传?
我正在努力学习AFNetworking,我从他们的Github上取了一个样本。我不知道使用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
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");