PHP CURL 上傳二進位制流圖片

AR414發表於2020-12-25

PHP CURL 上傳二進位制流圖片

前言

專案中模組資料由PHP爬蟲進行更新,當檢測到有新圖片時需要上傳到跨地區的CDN回源伺服器(靜態資源伺服器),伺服器負責人只提供一個上傳API

解決方法

  1. 將圖片儲存到本地再使用PHP CURL + new \CURLFile($path)上傳(缺點: IO操作)
  2. 模擬拼接請求資料包文,將圖片以二進位制檔案直接傳送給上傳API
composer require ar414/curl-upload-binary-image
<?php

require_once '../vendor/autoload.php';

use Ar414\UploadBinaryImage;

$url = 'http://0.4.1.4:414/upload?path=/test/';
$fields = [];
$fieldName = 'file';
$fileName = 'ar414.png';

$fileBody = file_get_contents('https://github.com/ar414-com/ar414-com/raw/master/assets/ar414.png');

$ret = UploadBinaryImage::upload($url,$fields,$fieldName,$fileName,$fileBody);
var_dump($ret);

解決思路

  1. 重溫HTTP知識
  2. 通過postmanGoogle Chrome 上傳檔案 檢視傳送的請求資料
  3. 拼接請求體
    • set Header multipart/form-data; boundary={md5(microtime())}
    • set Body Block Content-Type: application/octet-stream
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章