ここで ASIFormDataRequest を使用した単純な画像のアップロードを検索した後、最終的に機能するようになりましたが、予期しないエラーが発生しました。
画像がサーバーにアップロードされましたが、空白で、サイズが 0 バイトです。これが私のコードです:
-(IBAction)uploadImage:(id)sender
{
NSData *data = UIImageJPEGRepresentation(self.imageView.image,0.6f);
NSString *file = [NSTemporaryDirectory() stringByAppendingPathComponent:@"upload.png"];
[data writeToFile:file atomically:YES];
NSString *strURL = @"http://domain.com/upload.php";
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:strURL]];
UIImage *image1=[UIImage imageNamed:file];
NSData *imageData1=UIImageJPEGRepresentation(image1, 1.0);
[request setData:imageData1 withFileName:file andContentType:@"image/jpeg" forKey:@"avatar"];
[request setRequestMethod:@"POST"];
//[request appendPostData:body];
[request setDelegate:self];
[request setTimeOutSeconds:13.0];
request.shouldAttemptPersistentConnection = NO;
[request setDidFinishSelector:@selector(uploadRequestFinished:)];
[request setDidFailSelector:@selector(uploadRequestFailed:)];
[request startAsynchronous];
}
- (void)uploadRequestFinished:(ASIHTTPRequest *)request
{
NSLog(@" Error - Statistics file upload ok: \"%@\"",[request responseString]);
}
- (void)uploadRequestFailed:(ASIHTTPRequest *)request{
NSLog(@" Error - Statistics file upload failed: \"%@\"",[[request error] localizedDescription]);
}
私のPHPコード:
<?php
$target = "./";
$target = $target . basename( $_FILES['avatar']['name']) ;
$ok=1;
if(move_uploaded_file($_FILES['avatar']['tmp_name'], $target))
{
echo "The file ok";
}
else {
echo "Sorry, there was a problem uploading your file.";
}
?>
最初はフォルダの許可の問題だと思っていましたが、単純なhtmlフォームのアップロード(同じphpファイルを編集せずに)でテストしたところ、ファイルはフルサイズでアップロードされました。
このようなファイルのアップロード方法が危険であることは承知していますが、今のところそれしかありません。
私のファイルがアップロードされない理由はありますか? ありがとう。