我的问题的描述实际上是有问题的标题。我是网络技术的新手,所以这种行为对我来说有点引人注目。图片上传成功,为什么会调用失败 block ?此外,我在 SoF 上搜索了我的问题的答案并应用了一些解决方案,但仍然出现此错误。如果可能,请提供帮助。提前谢谢你。
目标 - C:
- (void)upload {
NSString *fileName = [NSString stringWithFormat"%ld%c%c.jpg", (long)[[NSDate date] timeIntervalSince1970], arc4random_uniform(26) + 'a', arc4random_uniform(26) + 'a'];
NSString *imagePath = [[NSBundle mainBundle] pathForResource"image" ofType"jpg"];
NSData *data = UIImagePNGRepresentation([UIImage imageWithContentsOfFile:imagePath]);
NSString *URLString = @"http://myServer/myAppFolder";
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager manager] initWithBaseURL:[NSURL URLWithString:URLString]];
AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
[manager setResponseSerializer:responseSerializer];
[manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObject"text/html"]];
AFHTTPRequestOperation *operation = [manager POST"upload.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:data name"uploadedfile" fileName:fileName mimeType"image/jpeg"];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failure / %@, / %@", error, operation.responseString); //error comes from here
}];
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
NSLog(@"uploading...");
}];
}
上传.php:
<?php
$filename="uploaded";
$target_path = "uploads/";
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file ". basename( $_FILES['uploadedfile']['name'])." has been uploaded";
} else {
echo "There was an error uploading the file, please try again!";
}
?>;
我收到此错误:
Failure / Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x8a633e0 {NSDebugDescription=Invalid value around character 0.}, / The file 1389046572lb.jpg has been uploaded;
Best Answer-推荐答案 strong>
问题似乎在于您使用 AFJSONResponseSerializer 来序列化 PHP 上传脚本的响应。
而且您的 PHP 没有返回 JSON - 因此序列化程序会引发错误。
您可以修改 PHP 脚本,使其返回 JSON 格式的结果。或者您可以使用不同类型的序列化程序。
根据this forum解决方案是使用 [AFResponseSerializer serializer] - 我不确定它是否存在。尝试基本的 AFHTTPResponseSerializer 。
关于php - 尽管上传成功,但调用了 AFNetworking 2.0 POST + PHP 阻止失败,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/20960529/
|