Heim > Artikel > Backend-Entwicklung > PHP über die AIP-Schnittstelle zum Hochladen von Bildern
Einfacher Fall eines PHP-Uploads:
Html-Datei:
100db36a723c770d327fc0aef2ce13b1e26208a155f35e341554823f0c61e237 df3ebe81f9e006ca6394758e87d62466 9d4b78a146d367b9a903fbbd0e39da2af5a47148e367a6035fd7a2faa965022e73a6ac4ed44ffec12cee46588e518a5e
Stilbezogen :
Klicken Sie auf dem Mobiltelefon auf die Schaltfläche „Hochladen“ und die Kamera wird angezeigt:
<input type="file" accept="image/*;capture=camera">直接调用相机 <input type="file" accept="image/*" />调用相机 图片或者相册Ein einfacher Fall des Hochladens mit thinkphp-Upload-Klasse:
d2154cf71c93d17079dde1e83aaf47fd
Mobile Version Beispiel für das Hochladen von Bildern durch eine App: API-Schnittstelle:
= 'maxSize' => 3145728, 'exts' => ('jpg', 'gif', 'png', 'jpeg'), 'rootPath' => './Public/Uploads/info/', 'savePath' => '', 'saveName' => ('uniqid',''), 'autoSub' => , 'subName' => ('date','Ymd'), upload(['result'] = 1['imgurl'] = ''['msg'] = '' = = ->upconfig['rootPath'] . ->upconfig['savePath'(!( = (, 0777, (! ['result'] = 0['msg'] = "创建保存图片的路径失败!" = \Think\Upload(->
(! ['result'] = 0['msg'] = -> = ->upconfig['rootPath'] . ['savepath'].['savename' = ('./', '/', ['result'] = 1['imgurl'] = (0 = ->upload(['attorney']);
Frage: App lädt Avatar hoch, wie soll PHP als API Bildinformationen erhalten? Der Upload-Teil des Codes stellt kein Problem dar, das Hauptproblem besteht darin, wie die Serverseite die Bildinformationen von der APP-Seite empfangen kann. Unter der B/S-Architektur können Sie enctype="multipart/form-data" direkt über das Formular festlegen, und die Bildinformationen befinden sich im Array $_FILES. Gilt das also auch im C/S-Modus?
Antwort 1 (siehe Methode 1)
:Antwort 2 (siehe Methode 2): Der Android- oder IOS-Client simuliert eine HTTP-Post-Anfrage an den Server und der Server empfängt die entsprechende Post-Anfrage (über $_FILES Obtain). Bildressourcen) und geben Antwortinformationen an den Client zurück. (Diese Methode ist dieselbe wie die Methode zum Erhalten der HTML-Übermittlung)
Methode 1:Base64 verschlüsselt das Bild in eine Zeichenfolge und überträgt es
Anweisungen: IOS- oder Android-Seite: Base64-codieren Sie das Bild, um die Zeichenfolge zu erhalten, und übergeben Sie es an die Schnittstelle Schnittstellenseite: Base64 decodieren die empfangene Zeichenfolge und laden Sie sie dann über die Funktion file_put_contents an den angegebenen Speicherort hoch 方式二:Android或者IOS客户端模拟一个HTTP的Post请求到服务器端,服务器端接收相应的Post请求后(通过$_FILES获取图片资源),返回响应信息给给客户端。(这一种方式和获取Html方式提交的方法一样) 移动端需要请求一个URL,这个URL接收POST过去的数据,比如:http://www.apixxx.net/Home/Uploader/uploadPrepare 相关推荐: 相关推荐: /**
* 图片上传
* @param $imginfo - 图片的资源,数组类型。['图片类型','图片大小','图片进行base64加密后的字符串']
* @param $companyid - 公司id
* @return mixed */
public function uploadImage( $imginfo , $companyid ) { $image_type = strip_tags($imginfo[0]); //图片类型
$image_size = intval($imginfo[1]); //图片大小
$image_base64_content = strip_tags($imginfo[2]); //图片进行base64编码后的字符串
$upload = new UploaderService(); $upconfig = $upload->upconfig; if(($image_size > $upconfig['maxSize']) || ($image_size == 0)) { $array['status'] = 13; $array['comment'] = "图片大小不符合要求!"; return $array;
} if(!in_array($image_type,$upconfig['exts'])) { $array['status'] = 14; $array['comment'] = "图片格式不符合要求!"; return $array;
} // 设置附件上传子目录
$savePath = 'bus/group/' . $companyid . '/'; $upload->upconfig['savePath'] = $savePath; //图片保存的名称
$new_imgname = uniqid().mt_rand(100,999).'.'.$image_type; //base64解码后的图片字符串
$string_image_content = base64_decode($image_base64_content); // 保存上传的文件
$array = $upload->upload($string_image_content,$new_imgname); return $array;
}
// 上传配置信息
public $upconfig = array( 'maxSize' => 3145728, //3145728B(字节) = 3M
'exts' => array('jpg', 'gif', 'png', 'jpeg'),// 'rootPath' => './Public/Uploads/info/',
'rootPath' => 'https://www.eyuebus.com/Public/Uploads/info/',
); /**
* @param $string_image_content - 所要上传图片的字符串资源
* @param $new_imgname - 图片的名称,如:57c14e197e2d1744.jpg
* @return mixed */
public function upload($string_image_content,$new_imgname) { $res['result'] = 1; $res['imgurl'] = ''; $res['comment'] = ''; do { $ret = true; $fullPath = $this->upconfig['rootPath'] . $this->upconfig['savePath']; if(!file_exists($fullPath)){ $ret = mkdir($fullPath, 0777, true);
} if(!$ret) { // 上传错误提示错误信息
$res['result'] = 12; $res['comment'] = "创建保存图片的路径失败!"; return $res; break;
} //开始上传
if (file_put_contents($fullPath.$new_imgname, $string_image_content)){ // 上传成功 获取上传文件信息
$res['result'] = 0; $res['comment'] = "上传成功!"; $res['imgname'] = $new_imgname;
}else { // 上传错误提示错误信息
$res['result'] = 11; $res['comment'] = "上传失败!";
}
} while(0); return $res;
}
public function uploadPrepare() { $array = array(); $post_log = print_r($_POST, true); Log::record($post_log, 'DEBUG'); $file_log = print_r($_FILES, true); Log::record($file_log, 'DEBUG'); $token = $_POST['token']; $token_str = jwt_decode($token);$user_type = $token_str['user_type'];
// 设置附件上传子目录
if($user_type == 1) { $savePath = 'travel/group/' . $user_companyid . '/';
}elseif ($user_type == 2) { $savePath = 'bus/group/' . $user_companyid . '/';
}elseif ($user_type == 3) { $savePath = 'driver/group/' . $user_companyid . '/';
}else { $array['status'] = 3; $array['comment'] = '非法用户!'; return $array;
} $this->upconfig['savePath'] = $savePath; // 保存上传的文件(单张)
// $res = $this->upload($_FILES['file']);
// 保存上传的文件(多张) 移动端的表单name=“xxx[]”,支持多张图片
$res = $this->upload(); $array['status'] = $res['status']; $array['comment'] = $res['comment']; $array['responseParameters']['img_url'] = $res['img_url']; echo json_encode($array);
} protected function upload() { $res['status'] = 1; $res['imgurl'] = ''; $res['comment'] = ''; do { $ret = true; $fullPath = $this->upconfig['rootPath'] . $this->upconfig['savePath']; if(!file_exists($fullPath)){ $ret = mkdir($fullPath, 0777, true);
} if(!$ret) { // 上传错误提示错误信息
$res['status'] = 1; $res['comment'] = "创建保存图片的路径失败!"; break;
} // 实例化上传类
$upload = new \Think\Upload($this->upconfig);// // 上传单个文件
// $info = $upload->uploadOne($file);
// 上传多个文件
$infos = $upload->upload(); // 上传的图片数量
$file_count = 0; foreach ($_FILES as $file_k => $file_v) { foreach ($file_v["size"] as $k => $v) { if($v == 0) { continue;
} $file_count += 1;
}
} Log::record("info_log", 'DEBUG'); $info_log = print_r($infos,true); Log::record($info_log, 'DEBUG'); if(!$infos) { // 上传错误提示错误信息
$res['status'] = 2; $res['comment'] = $upload->getError();
} else { // 获取的上传成功的图片数量
$info_count = 0; // 上传成功 获取上传文件信息
foreach($infos as $k => $v) { $imgurl[$v['key']][] = str_replace('./', '/', $this->upconfig['rootPath'] . $v['savepath'].$v['savename']); $info_count += 1;
} if($file_count != $info_count) { $res['status'] = 1; $res['comment'] = "上传失败!上传的多张图片,没有全部上传成功";
}else { $res['status'] = 0; $res['comment'] = "上传成功!"; $res['img_url'] = $imgurl;
}
}
} while(0); return $res;
}
Das obige ist der detaillierte Inhalt vonPHP über die AIP-Schnittstelle zum Hochladen von Bildern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!