まず、いくつかのHTML5の仕様
- ファイル
- FileReaderの
- ArrayBuffer
- ブロブ
ファイルアップロード入力ファイルは、ファイルのブロブは、設計に基づいており、ファイルの種類です。
インターフェイスは、スライス法は、文書、アップロードされた断片化の目的を分離することができています。
FileReaderのブロブは、内部の内容を読み取ることができます。
//は、Blobオブジェクトに文字列を変換 するvar BLOB = 新しい新しいブロブ([ '中国語文字列が' ]、{ タイプ: 'text / plainの' }); // 文字列のブロブ内にオブジェクトを変換 するvarリーダー= 新しい新規FileReaderの() ; reader.readAsText(BLOB、 'UTF-8' ); reader.onload = 関数(E){ console.info(reader.result); }
アップロードファイルのインタフェースタイプがmultipart / form-dataに設定し、スライスした後、ファイルのスライスをアップロードしています。
VaRのファイル=のdocument.getElementById( 'アップロード' ).FILE。 VaRのフォーム= 新しいいるFormData(); VAR startSize = 0 ; VAR CHUNKSIZE = 5242880; // 每次分割5Mの form.append( 'ファイル'、file.slice(startSize、startSize + CHUNKSIZE));
startSize + = CHUNKSIZE。
xhr.open( 'ポスト'、 '/アップロード'、真の); xhr.send(フォーム)
あなたは、このような恐るべき、multerなどのミドルウェアを持つファイルを、解析することができますノード
CONST驚異=は(「驚異」が必要)。 app.use(驚異的( { エンコーディング: 'UTF-8' 、 倍数:真、// ファイルの配列であるためreq.files } ))。
次のようにインタフェースは、ファイルがファイル読み取り操作および書き込み、ストリームfs.createReadStreamで読み取ることができます。
VAR のfileInfo、 fileReceive。 app.post( '/アップロード' 機能(REQ、RES){ はconsole.log( 'ファイル' 、req.files); VARのファイル= req.files.file; 場合(ファイル&& fileInfo.end < fileInfo.size) { fs.readFile(file.path、(ERR、データ) => { 場合(ERR){ 戻りconsole.error(ERR); }; fileReceive = fileReceive?Buffer.concat([fileReceive、データ]):データ; のfileInfo .END + = data.length; もし(fileInfo.end> = fileInfo.size){ fs.writeFile(fileInfo.name、fileReceive、() => { にconsole.log( '完成上传!' ); }); }。 res.send({進捗:fileInfo.end / fileInfo.size})。 }); } 他{ res.send( 'エラー' )。 } })。
各バッファに断片化されたファイルを受信した後、最初のファイルサイズをマージして保存し、総ファイルサイズ、ファイル名やその他の情報を取得し、かつ、ファイルの保存、完全な受信後に、受信されています。
なお、この方法は、ノードがファイルを動作可能受け入れるより多くのメモリを必要とする、または再びセグメントファイル、キャッシュにないノードを受信した場合たびにファイルを読み込み、これは時間がかかります。