multipartメッセージからデータとそれぞれのファイルを抽出する。
アップロードされたファイルを扱うだけでなく、一般的なPOSTデータも扱う。
fieldイベントを受け取ることでフォーム入力値を扱うことができる。
フォーム入力値とファイル両方を扱うこともできる。
formidableは自動的にフィールドデータサイズの制限を設定するため、手動で制限する必要はないが、incoming.maxFieldSizeを設定することでこの制限の変更が可能。
デフォルトは2MB。
この制限値は、アップロードファイル以外のすべてのフィールドデータの合計値に対する制限で、アップロードファイルのサイズには適用されない。
formidableがuploadsディレクトリにファイルを保存する際には、ファイル名はランダムな16進数の値となる。これは、ユニークなファイル名を生成することにより、同名のファイルを上書きしないようにするための処置。
ユニークなファイル名で既存ファイルに上書きしないようにした上で、ファイル名で内容を判別できるようにするためには、formidableからfileBeginイベント(multipartのファイルを受け取る度に発生)を受け取る。
server.js
formidableが生成したランダムなファイル名にオリジナルのファイル名を追記した。
ファイル名 ランダムな16進数-アップロードされたファイル名
ex) 53bf1b88b3f2fea77adda332cf0fa3bd-form.html
これで、ファイルの内容を判別することができる。
しかし、アプリケーションを開発する際は多くの場合、アップロードファイルの内容はデータベースに送られて、ランダムに生成されたファイル名と関連づけられるため、ファイル名自体を変更することはあまり多くないかもしれない。
Nodeクックブック p.37
アップロードされたファイルを扱うだけでなく、一般的なPOSTデータも扱う。
fieldイベントを受け取ることでフォーム入力値を扱うことができる。
フォーム入力値とファイル両方を扱うこともできる。
formidableは自動的にフィールドデータサイズの制限を設定するため、手動で制限する必要はないが、incoming.maxFieldSizeを設定することでこの制限の変更が可能。
デフォルトは2MB。
この制限値は、アップロードファイル以外のすべてのフィールドデータの合計値に対する制限で、アップロードファイルのサイズには適用されない。
formidableがuploadsディレクトリにファイルを保存する際には、ファイル名はランダムな16進数の値となる。これは、ユニークなファイル名を生成することにより、同名のファイルを上書きしないようにするための処置。
ユニークなファイル名で既存ファイルに上書きしないようにした上で、ファイル名で内容を判別できるようにするためには、formidableからfileBeginイベント(multipartのファイルを受け取る度に発生)を受け取る。
server.js
var http = require('http');
var formidable = require('formidable');
var form = require('fs').readFileSync('form.html');
http.createServer(function (req,res){
if(req.method === 'GET'){
res.writeHead(200,{'Content-Type': 'text/html'});
res.end(form);
}
if(req.method === 'POST'){
var incoming = new formidable.IncomingForm();
incoming.uploadDir = 'uploads';
incoming.on('fileBegin',function(field,file){
if(file.name){
file.path += '-' + file.name;
}
}).on('file',function(field,file){
if(!file.size){return;}
res.write(file.name + 'を受け取りました\n')
}).on('field',function(field,value){
res.write(field + ':' + value + '\n');
}).on('end',function(){
res.end('すべてのファイルを受け取りました');
});
incoming.parse(req);
}
}).listen(8080);
formidableが生成したランダムなファイル名にオリジナルのファイル名を追記した。
ファイル名 ランダムな16進数-アップロードされたファイル名
ex) 53bf1b88b3f2fea77adda332cf0fa3bd-form.html
これで、ファイルの内容を判別することができる。
しかし、アプリケーションを開発する際は多くの場合、アップロードファイルの内容はデータベースに送られて、ランダムに生成されたファイル名と関連づけられるため、ファイル名自体を変更することはあまり多くないかもしれない。
Nodeクックブック p.37