2010/09/26

HTTPでファイルのアップロードを行う

NILScriptには、HTTPでリクエストを送信してレスポンスを得る機能も用意されています。
一発でレスポンスボディを得られる手軽なメソッドや、レスポンスボディをストリームとして逐次読み込みするオブジェクトを返すメソッドなどが用意されている他、リクエストヘッダの指定やプロキシの使用など、柔軟な動作設定も可能です。
WSHなどでは実現が面倒なファイルのアップロードも、下記の例のように簡単に実現できます。
require('HTTP').HTTP.post(url,{
 upfile:new File(filePath),
 pass:"test",
 com:"this is test of file upload",
});
ファイルのアップロードを行うには、POSTによるリクエストを行うpost()メソッドを使用します。
第1引数はリクエストするURL(HTMLのform要素のaction属性で指定される物)を、第2引数にはフォームの項目名と項目内容のペアを列挙したオブジェクトを指定します。
ここで項目内容としてFileオブジェクトが指定されていると、そのファイルの内容がアップロードされます。
上記の例では、変数に格納されたフルパスを元にFileコンストラクタを呼び出していますが、実行時にファイルの指定を受け付ける様々な方法の記事で紹介したような方法で得たFileオブジェクトを指定してもよいでしょう。
post()メソッドは、アップロード完了後に表示されるページの内容などのレスポンスボディ文字列を返します。アップロードされたファイルのURLを得たい場合などは、返り値の内容を正規表現マッチングで調べたりするとよいでしょう。

なお、NILScriptのHTTPには、非同期的な処理を行う機能は用意されていないません。
リクエストを開始したら即座に次の処理に進みたい場合には、「Thread.create()」で生成したスレッド内でリクエストを実行することで非同期化してください。

0 件のコメント:

コメントを投稿