csvファイルといくつかのPOSTフィールドを、PHPとCurlを使用したマルチパートPOSTを使用してREST APIエンドポイントにHTTP PUTする必要があります。CurlとPHPを使用したRESTエンドポイントへのマルチプルPUTアップロード
ファイルアップロードの内容は、変数$ listに格納されます。もう1つのエンドポイントは$ urlです。
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PUT, true);
$post = array(
//Other Post fields array
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$fh = fopen('php://memory', 'rw');
fwrite($fh, $list);
rewind($fh);
curl_setopt($ch, CURLOPT_INFILE, $fh);
curl_setopt($ch, CURLOPT_INFILESIZE, strlen($list));
$response = curl_exec($ch);
上記のコードでは、唯一の問題は、他のエンドポイントは、ファイルアップロードのための特定のフィールド名を必要とすることで動作しているようです。ファイル名を設定するには?
私は何か間違っていますか?
これはFYIことがmultipart/form-data
である彼らはAPI
Content-Disposition: form-data; name="list[csv]"; filename="RackMultipart20110923-63966-hfpyg"
Content-Length: 33
Content-Type: text/csv
Content-Transfer-Encoding: binary
xxxx
yyyy
zzzz
-------------MultipartPost
Content-Disposition: form-data; name="list[list_type]"
Blacklist
-------------MultipartPost--
マルチパートデータのPUTが間違った方法であることにご注意ください。 PUTリクエストは、サーバー上のファイルの内容に直接関係していると思われます。マルチパートリクエストをPUTするのはあまり意味がありません。代わりにPOSTする必要はありませんか? POSTing ['multipart/form-data'](http://en.wikipedia.org/wiki/MIME#Form_Data)はここでもっと意味をなさないでしょう...ファイルは' Content-Disposition :添付ファイル。 name = "フィールド名";ファイル名= "ファイル名"ヘッダ – DaveRandom
1. RESTエンドポイントにはPUTが必要です。 2. POSTを使ってファイルをアップロードするには、POST配列のファイル名を指定する必要があります。変数からアップロードする必要があります。おそらく中間的な解決策は、変数から一時ファイルを作成してアップロードすることですが、私はこれをやりたくありません。 –
送信しているコンテンツのMIMEタイプは何ですか?エンドポイントのAPIドキュメントを教えてください。 'multipart/*'型の何らかの形式を使わずにファイル名を指定する方法は分かりません。この場合は必要な 'Content-Disposition'ヘッダです。メッセージ本体を自分で構築する必要があるかもしれません。 – DaveRandom