현재 프로젝트에서 특정 데이터를 수집하여 사용자 요청에 의해 백엔드 서버로 전송하는 UITableViewController
을 구현했습니다. 이 모든 것이 훌륭하게 멋지게 작동합니다. 그러나 이미지를 업로드하는 데 문제가 있습니다.UIImagePickerController에서 ASIFormDataRequest를 사용하여 PHP 서버로 보내기
UIImagePickerController
이미지를 얻고 보내면 서버에 문제가있는 것 같습니다. 만약 JPEG로 인코딩한다면, PHP는 그것을 이해하지 못하는 것 같습니다. PNG로 인코딩하면 전체 요청이 엉망이 될 것 같습니다.
그러나 프로젝트에있는 다른 이미지 (예 : 일부 배경 이미지)를 선택하면 업로드 프로세스가 완벽하게 작동합니다. 그것은 이상한 부분입니다. 최대한 빨리 UIImagePickerController에서 이미지를 사용하여, 그것은 작동하지 않습니다 ... 비록 내가 이미지를 얻을 않습니다 (코드에서 addSubview 참조) 작동합니다.
이
내 코드입니다 :@interface ServiceViewController()
@property (nonatomic) UIImage *image;
[...]
@end
@implementation ServiceViewController
@synthesize image = _image;
[...]
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
self.image = [[info objectForKey:UIImagePickerControllerOriginalImage] copy];
[self.tableView reloadData];
[self dismissModalViewControllerAnimated:YES];
}
- (void)sendToApi
{
// Send post data
NSString *urlString = [NSString stringWithFormat:@"%@/%@", API_BASE_DOMAIN2, @"requestservice"];
urlString = @"http://localhost/api/public_html/requestservice";
NSURL *url = [NSURL URLWithString:urlString];
ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:url];
[request setUseKeychainPersistence:YES];
[request setPostValue:[self.problems objectAtIndex:self.problem] forKey:@"problem"];
[request setPostValue:[self stationName] forKey:@"station"];
[request setPostValue:self.otherInformation forKey:@"information"];
[request setPostValue:[NSNumber numberWithInt:self.lock] forKey:@"lock"];
[request setUploadProgressDelegate:self];
[request setDidFinishSelector:@selector(didCompleteRequestService:)];
[request setDidFailSelector:@selector(processFailed:)];
[request setDelegate:self];
[request setRequestMethod:@"POST"];
// Upload an image
[request addData:[NSData dataWithData:UIImageJPEGRepresentation(self.image, 0.9)] withFileName:@"img.jpg" andContentType:@"image/jpeg" forKey:@"picture"];
UIImageView *view = [[UIImageView alloc] initWithImage:self.image];
[view sizeToFit];
[self.view addSubview:view];
[request startAsynchronous];
}
- (void)setProgress:(float)newProgress {
// [prgressView setProgress:newProgress];
NSLog(@"New progress: %f", newProgress);
}
- (void)didCompleteRequestService:(ASIHTTPRequest *)request
{
NSLog(@"Request completed");
NSLog(@"Result: %@", request.responseString);
}
서버 측 : 나는 다음과 같은 여러 가지의 무리를 시도
2013-03-21 00:04:04.859 AppName[15598:c07] New progress: 0.000000
2013-03-21 00:04:04.862 AppName[15598:c07] New progress: 1.000000
2013-03-21 00:04:04.863 AppName[15598:c07] Request completed
2013-03-21 00:04:04.863 AppName[15598:c07] Result: array(1) {
["picture"]=>
array(5) {
["name"]=>
string(7) "img.jpg"
["type"]=>
string(0) ""
["tmp_name"]=>
string(0) ""
["error"]=>
int(1)
["size"]=>
int(0)
}
}
array(5) {
["name"]=>
string(7) "img.jpg"
["type"]=>
string(0) ""
["tmp_name"]=>
string(0) ""
["error"]=>
int(1)
["size"]=>
int(0)
}
string(58) "/Users/paulp/Sites/api/service/K98XQPo7zx.jpg"
Sending error: 500
: 이것은 내 결과입니다
var_dump($_FILES);
if ($this->_aPicture !== null) {
$sTarget = DIR_SERVICE . $this->_sFileNamePrefix . ".jpg";
var_dump($this->_aPicture);
var_dump($sTarget);
if (!move_uploaded_file($this->_aPicture['tmp_name'], $sTarget)) {
$this->returnHttpError(500);
}
}
$this->_writeDataToFile();
:
- How to upload image that was taken from UIImagePickerController
- Upload picture selected using UIImagePickerController 및 그 이상.
예를 들어 변경하지 않았습니다. MKNetworkKit은 (아직) 시간이나 예산이 없기 때문에 해결책이 아닙니다.
이 문제를 어떻게 해결할 수 있습니까?
위에서 언급했듯이 PNG 표현은 어떤 이유로 든 전체 양식을 망가 뜨립니다. 그것을 사용하여, PHP는 결국 POST 데이터를 수신하지 않는 것 같습니다. –
서버 측 프로그래머에게 물어 보겠습니다. – iiFreeman
맨 위에 쓰여 있듯이 upload_max_filesize 제한과 관련된 문제가 발생합니다. 오류 = 1은 다음을 의미합니다. "업로드 된 파일이 php.ini의 upload_max_filesize 지시문을 초과합니다." 이 설정의 기본값은 2M입니다. 2M을 더 업로드하려고합니다. php.ini 파일을 편집하고 php (또는 아파치를 사용한다면)를 다시 시작하십시오. – Karisters