Zend_Httpを使ってAPIからファイルをアップロードするプログラムを作ってみました。 http://example.com/api/file_post というAPIがあって、これを使ってファイルをアップロードすると仮定しています。 コードは以下のようになっています。``` require_once ‘Zend/Http/Client.php’;
$url = “http://example.com/api/file_post”; $filename = “example.jpg”;
$client = new Zend_Http_Client($url); // オプションの設定は省略 $client->setFileUpload($filename, ‘file’, null, ‘image/jpeg’); $response = $client->request(‘POST’);
これだけで完了です。通常のフォームからのアップロードと同様に、サーバのスクリプトから$\_FILES\['file'\] で参照することができます。 Zend\_Http\_ClientのsetFileUpload()関数でアップロードするファイルを設定して、request()関数でHTTPリクエストをかけます。 リファレンスガイドではsubmit()関数を使っていたのですが、そのような関数は定義されていなかったので代わりにrequest()関数を使用しています。 続いて、setFileUpload()関数の引き数について説明します。 最初の引数では、アップロードするファイル名を指定します。ただし、この引数は第3引数の値で内容が変わってきます。 第3引数がnullの場合は、ここで指定されたファイルが実際にアップロードされます。もしnullでない場合はアップロードするときのファイル名としてこの値が使われるだけで、ファイルの内容は第3引数のものが使用されます。
$filename = “text.txt”;
$text = “this is upload test”;
$client->setFileUpload($filename, ‘file’, $text, ‘text/plain’); $response = $client->request(‘POST’);
この場合、たとえローカルに別の内容でtext.txtというファイルが存在していても、「this is upload test」という内容で送信されます。 2番目の引数ではフォーム名を指定します。
のxxxにあたる部分ですね。 サーバスクリプト側では
$_FILES[‘file’]