首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

美圖秀秀 Web 開放平台 PHP 圖片上傳接口對接:流式與表單雙模式示例

     編輯:PHP 相關知識

美圖秀秀 Web 開放平台 PHP 圖片上傳接口對接:流式與表單雙模式示例

美圖秀秀開放平台提供兩種上傳接口,本文給出 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-Typeapplication/octet-streammultipart/form-data
PHP 讀取方式php://input 獲取原始二進制$_FILES 超全局陣列
文件名/類型需自行生成(如 uniqid + .jpg)從 $_FILES 獲取原始信息
適用場景Flash/客戶端直傳、大文件流式處理標準 HTML 表單、瀏覽器原生上傳
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved