美圖秀秀開放平台提供兩種上傳接口,本文給出 PHP 端完整接收代碼,涵蓋流式上傳(octet-stream)與表單上傳(multipart/form-data)兩種模式。
https://imgkaka.meitu.com/xiuxiu_web_pic_save.php(Content-Type: application/octet-stream)https://web.upload.meitu.com/image_upload.php(Content-Type: multipart/form-data,字段名 upload_file)xiuxiu_web_pic_save.php)<?php
$post_input = 'php://input';
$save_path = dirname(__FILE__);
$postdata = file_get_contents($post_input);
if (isset($postdata) && strlen($postdata) > 0) {
$filename = $save_path . '/' . uniqid() . '.jpg';
$handle = fopen($filename, 'w+');
fwrite($handle, $postdata);
fclose($handle);
if (is_file($filename)) {
echo 'Image data save successed,file:' . $filename;
exit();
} else {
die('Image upload error!');
}
} else {
die('Image data not detected!');
}
image_upload.php)<?php
if (!$_FILES['Filedata']) {
die('Image data not detected!');
}
if ($_FILES['Filedata']['error'] > 0) {
switch ($_FILES['Filedata']['error']) {
case 1: $error_log = 'The file is bigger than this PHP installation allows'; break;
case 2: $error_log = 'The file is bigger than this form allows'; break;
case 3: $error_log = 'Only part of the file was uploaded'; break;
case 4: $error_log = 'No file was uploaded'; break;
default: $error_log = 'Unknown upload error';
}
die('upload error:' . $error_log);
}
$img_data = $_FILES['Filedata']['tmp_name'];
$size = getimagesize($img_data);
$file_type = $size['mime'];
$allowed = array('image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/gif');
if (!in_array($file_type, $allowed)) {
die('upload error: only allow jpg,png,gif');
}
switch ($file_type) {
case 'image/jpg': case 'image/jpeg': case 'image/pjpeg': $extension = 'jpg'; break;
case 'image/png': $extension = 'png'; break;
case 'image/gif': $extension = 'gif'; break;
}
if (!is_file($img_data)) {
die('Image upload error!');
}
$save_path = dirname(__FILE__);
$filename = $save_path . '/' . uniqid() . '.' . $extension;
$result = move_uploaded_file($img_data, $filename);
if (!$result || !is_file($filename)) {
die('Image upload error!');
}
echo 'Image data save successed,file:' . $filename;
exit();
| 特性 | 流式上傳 | 表單上傳 |
|---|---|---|
| Content-Type | application/octet-stream | multipart/form-data |
| PHP 讀取方式 | php://input 獲取原始二進制 | $_FILES 超全局陣列 |
| 文件名/類型 | 需自行生成(如 uniqid + .jpg) | 從 $_FILES 獲取原始信息 |
| 適用場景 | Flash/客戶端直傳、大文件流式處理 | 標準 HTML 表單、瀏覽器原生上傳 |