厳密に言えば、Square API のドキュメントでは、いくつかのことを念頭に置いてそれらのメソッドを実装できます。
-- 以下のサンプルのように、リクエストは境界で囲み、コンテンツの性質、名前、ファイル名、コンテンツ タイプを含める必要があります。
--BOUNDARY
Content-Disposition: form-data; name="image_data"; filename="MyImage.png"
Content-Type: image/png
{BLANK LINE IS REQUIRED}
IMAGE BINARY DATA GOES HERE
--BOUNDARY--
基本的に、要求の形式はサンプルで指定されているとおりにする必要があります。これには、「境界」、改行文字、必要なヘッダー、ヘッダー間の空白行 (何らかの理由で行が存在しないと何も機能しません)、および実際の画像バイナリ データが含まれます。注: 境界は任意の文字列にすることができますが、一貫して使用する必要があります。コードでは、これは次のようになります。
$boundary = "---------------------" . md5(mt_rand() . microtime());
$imageToUpload = "--{$boundary}" . "\r\n" .
"Content-Disposition: form-data; name=\"image_data\"; filename=\"" . $full_path_to_image_file . "\"" . "\r\n" .
"Content-Type: image/jpeg" . "\r\n" .
"\r\n" . // <- empty line is required
(file_get_contents($full_path_to_image_file)) . "\r\n" .
"--{$boundary}--";
上記は、次のようなリクエストを生成します。
-----------------------51b62743876b1201aee47ff4b1910e49
Content-Disposition: form-data; name="image_data"; filename="/some/directory/image.jpg"
Content-Type: image/jpeg
����
-----------------------51b62743876b1201aee47ff4b1910e49--
-- 技術的に言えば、リクエストの Content-Type は、アップロードする画像のタイプ (image/jpeg または image/png) によって変更する必要があります。すべてのベースをカバーするために、コンテンツ タイプを application/octet-stream に設定できます。
-----------------------51b62743876b1201aee47ff4b1910e49
Content-Disposition: form-data; name="image_data"; filename="/some/directory/image.jpg"
Content-Type: application/octet-stream
����
-----------------------51b62743876b1201aee47ff4b1910e49--
上記の 2 つの例では、画像をアップロードします。
-- 「イメージ バイナリ データ」は誤解を招く可能性があります。これは、すべての検索でイメージ バイナリが base64_encode 関数を使用して取得されることが示されたからです。私の実験では、base64_encoding は何もしません。file_get_contents でファイルを開くだけです。
-- cURL リクエストでは、ヘッダーの Content-Type を multipart/form-data に設定し、リクエストと同じ境界を持つ必要があります。以下の例:
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $personalAccessToken, 'Content-Type: multipart/form-data; boundary=' . $boundary ));
したがって、これにより別のソリューションがミックスに追加されます。