Php 无法将映像上载到服务器ios
您好,我正在尝试将图像从IOS设备上载到服务器 这是我上传图片的代码Php 无法将映像上载到服务器ios,php,ios,objective-c,file-upload,image-uploading,Php,Ios,Objective C,File Upload,Image Uploading,您好,我正在尝试将图像从IOS设备上载到服务器 这是我上传图片的代码 - (IBAction)btnUpload:(id)sender { if (self.imageViewGallery.image == nil) { UIAlertView *ErrorAlert = [[UIAlertView alloc] initWithTitle:@"Wait"
- (IBAction)btnUpload:(id)sender {
if (self.imageViewGallery.image == nil) {
UIAlertView *ErrorAlert = [[UIAlertView alloc] initWithTitle:@"Wait"
message:@"Please Select An Image To Upload." delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[ErrorAlert show];
NSLog(@"error");
}
else{
NSData *imageData = UIImageJPEGRepresentation(self.imageViewGallery.image, 90);
NSString *urlString = @"http://localhost/ColorPicker/api.upload.php";
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSString *imgName = LIbraryImage;
NSLog(@"image name : %@",imgName);
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"files\"; filename=\"%@\"\r\n", imgName]] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
NSLog(@"setRequest : %@", request);
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"returnstring is : %@",returnString);
}
这是我的服务器端代码。有点长
<?php
$Image = $_FILES['files']['name'];
print_r($_FILES);
foreach ($Image as $f => $name) {
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $name);
$extension = end($temp);
if ((($_FILES['files']['type'][$f] == "image/gif") || ($_FILES['files']['type'][$f] == "image/jpeg") || ($_FILES['files']['type'][$f] == "image/jpg") || ($_FILES['files']['type'][$f] == "image/png")) && ($_FILES['files']['size'][$f] < 2000000) && in_array($extension, $allowedExts)) {
if ($_FILES['files']['error'][$f] > 0) {
echo "Return Code: " . $_FILES['files']['error'][$f] . "<br>";
} else {
if (file_exists("upload/" . $name)) {
} else {
move_uploaded_file($_FILES['files']['tmp_name'][$f], 'upload/' . uniqid() . "_" . $name);
}
}
} else {
$error = "Invalid file";
}
}
?>
现在,每次我尝试上传时都会发生什么?我得到了这个警告
<b>Warning</b>: Invalid argument supplied for foreach() in <b>/Applications/XAMPP/xamppfiles/htdocs/ColorPicker/uploadAction.php</b> on line <b>5</b><br />
警告:为第5行/Applications/XAMPP/xamppfiles/htdocs/ColorPicker/uploadAction.php中的foreach()提供的参数无效
当您以多部分方式上载图像数据时,它最终会以。自PHP4.3.0以来,$\u REQUEST
不再包含任何关于以这种方式上载的文件的信息
代码的其余部分基于这样一种思想:图像不是作为多部分上传的,而是以标准形式作为base-64字符串上传的。您不需要将base 64数据写入文件,只需从
$\u FILES
中获取有关文件的信息,并将其移动到目标目录。从注释中,即print\u r
返回:
Array (
[files] => Array (
[name] => iphone.jpg
[type] => application/octet-stream
[tmp_name] => /Applications/XAMPP/xamppfiles/temp/php4VsKOv
[error] => 0
[size] => 13484
)
)
同时,您的代码正在执行以下操作:
$Image = $_FILES['files']['name'];
print_r($_FILES);
foreach ($Image as $f => $name) {
您将$\u文件['FILES']['name']视为一个数组,而实际上它不是。这就是为什么PHP说“为foreach()提供的参数无效”
请注意,如果使用相同的表单元素名称上载多个文件,则它可以成为一个数组。这是迄今为止关于$\u文件
最令人恼火的事情
上载代码不会尝试使用一次上载多个文件所需的PHP语法,因此PHP代码不需要担心内部数组的内容是数组本身。您可以消除
foreach
循环和对[$f]
索引的所有引用。PHP中运行的是哪个else块?“未发布”或“错误”一个?始终未发布…打印($\u文件)的输出是什么?请发布打印($\u文件)的输出。ye sir它返回以下数组([FILES]=>array([name]=>iphone.jpg[type]=>application/octet流[tmp_name]=>/Applications/XAMPP/xamppfiles/temp/php4VsKOv[error]=>0[size]=>13484])是的。请验证该文件是用print_r($\u FILES)
上载的,然后重写PHP。先生,我做了一些更改,请您帮助我。