[英]Request failed: unacceptable content-type: image/jpg using AFNetworking 2.5
I know this question has already been asked several times in stack overflow. 我知道这个问题已经在堆栈溢出中被问过几次了。 But I am still quite confusing about it.
但是我对此仍然感到困惑。 I tried use
我尝试使用
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", @"image/jpg", nil];
But I still got the error until I added header("Content-type:application/json"); 但是在添加header(“ Content-type:application / json”);之前,我仍然遇到错误。 in my php file.
在我的php文件中。 But there is no jason struct in my php file.
但是我的php文件中没有jason struct。
My ios side is: 我的ios方面是:
AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer];
NSError *__autoreleasing* error;
// 2. Create an `NSMutableURLRequest`.
NSMutableURLRequest *request = [serializer multipartFormRequestWithMethod:@"POST" URLString:@"http://192.168.199.118/search.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData
name:@"uploadedfile"
fileName:@"image.jpg"
mimeType:@"image/jpg"];
} error:(NSError *__autoreleasing *)error];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", @"image/jpg", nil];
AFHTTPRequestOperation *operation =
[manager HTTPRequestOperationWithRequest:request
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failure %@", error.description);
if (error.code == -1001) {
[self NetworkAlert:@"Resquest timed out. Please try again and check your network connection."];
}
}];
My php side is : 我的PHP方面是:
<?php
#function for streaming file to client
function streamFile($location, $filename, $mimeType='image/jpg')
{ if(!file_exists($location))
{ header ("HTTP/1.0 404 Not Found");
return;
}
//header("Content-Type: $mimeType");
header("Content-type:application/json");
readfile($location);
}
#**********************************************************
#Main script
#**********************************************************
header("Content-type:application/json");
#<1>set target path for storing photo uploads on the server
$photo_upload_path = "upload/";
$photo_upload_path = $photo_upload_path.basename( $_FILES['uploadedfile']['name']);
$photo_upload_indicator_path = "upload/image_ready";
#<2>set target path for storing result on the server
$downloadFileName = 'processed_';
$processed_photo_output_path = "output/processed_";
$processed_photo_output_path = $processed_photo_output_path.basename( $_FILES['uploadedfile']['name']);
$processed_photo_output_indicator_path = "output/result_ready";
$downloadFileName = $downloadFileName.basename( $_FILES['uploadedfile']['name']);
#<3>modify maximum allowable file size to 10MB and timeout to 300s
ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);
#<4>Get and stored uploaded photos on the server
if(copy($_FILES['uploadedfile']['tmp_name'], $photo_upload_path)) {
#<5>signal that the image is ready
$handle = fopen($photo_upload_indicator_path, 'w');
fprintf($handle, '%s', $photo_upload_path);
fclose($handle);
#<6>wait until the result is ready
while (!file_exists($processed_photo_output_indicator_path))
{
usleep(1000000);
}
usleep(1000000);
unlink($processed_photo_output_indicator_path);
#<7>stream processed photo to the client
streamFile($processed_photo_output_path, $downloadFileName,'image/jpg');
} else{
echo "There was an error uploading the file to $photo_upload_path !";
}
?>
The header("Content-type:application/json"); 标头(“ Content-type:application / json”); helps me solve the problem.
帮助我解决问题。 But I don't know why.
但是我不知道为什么。 And if delete this code, I will always get the the "request failed error".
如果删除此代码,我将始终收到“请求失败错误”。 And if I want to receive some info from the php server with the image, which way is the best?
如果我想从php服务器上获取带有该图像的信息,哪种方法是最好的? Thank you very much for any advise.
非常感谢您的任何建议。
Your PHP script sets a Content-type
header in the line just below the comment #Main script
您的PHP脚本在注释
#Main script
正下方的行中设置了Content-type
标头
You should remove this and respond with the correct mime-type for your image, image/jpeg
(include the 'e'). 您应该删除它,并以正确的MIME类型响应您的图像
image/jpeg
(包括“ e”)。 AFNetworking ships with a response serializer, AFImageResponseSerializer
, which will automatically decode a response with Content-type image/jpeg
into a UIImage: AFNetworking附带一个响应序列化程序
AFImageResponseSerializer
,它将自动将Content-type image/jpeg
的响应解码为UIImage:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFImageResponseSerializer serializer];
AFHTTPRequestOperation *operation =
[manager HTTPRequestOperationWithRequest:request
success:^(AFHTTPRequestOperation *operation, UIImage *responseImage) {
NSLog(@"Success %@", responseImage);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failure %@", error.description);
if (error.code == -1001) {
[self NetworkAlert:@"Resquest timed out. Please try again and check your network connection."];
}
}];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.