nodeはexpress+multierファイルを使ってアップロードしてダウンロードする問題です.

3846 ワード

簡単にmultierを使ってファイルのアップロードとダウンロードを実現します.
1、ファイルアップロードはmultierを使用して、まずプロジェクトにmulerモジュールをインストールします.
npm install multer -save
2、ここではexpressモジュールを使って、multierファイルのアップロードは単一ファイルと複数ファイルに分けられています.単一ファイルの使用は以下の通りです.
(1)クライアントコードはここで簡単にフォームを使って提出します.ポスト方式を使ってフォームは必ずenctype=「multiipad/form-data」を設定します.

(2)クライアントはここに来ればいいです.以下はサービス端末の配置を行います.単一ファイルが使えば、single(「ここにフォームのname値を書きます.」)
let express = require('express');
let multer = require('multer');
let fs = require("fs");
let path = require("path");
let router = express.Router();

router.post('/', multer({
      //        
     dest: 'upload'   //upload               。
 }).single('file'), function (req, res, next) {
    if (req.file.length === 0) {  //          ,             。
        res.render("error", {message: "        !"});
        return
    } else {
       let file = req.file;
       let fileInfo = {};
       console.log(file);
       fs.renameSync('./upload/' + file.filename, './upload/' + file.originalname);//        ,    。
       //       
       fileInfo.mimetype = file.mimetype;
       fileInfo.originalname = file.originalname;
       fileInfo.size = file.size;
       fileInfo.path = file.path;

       //          
       res.set({
         'content-type': 'application/json; charset=utf-8'
      });

       res.end("    !");
    }
 });
3、以下はマルチファイルの使用で、前述のinputフォームmultiple属性を覚えてください.
(1)クライアントコードは上記と同じです.

(2)サービス先のコードはsingleを使わずに使用します.array(「フォームname属性」、「ここに最大サポートされているファイル数を記入します.」)の使い方は以下の通りです.

router.post('/', multer({
    //        
    dest: 'upload'
}).array('file', 10), function (req, res, next) {  //  10             
    let files = req.files;
    if (files.length === 0) {
        res.render("error", {message: "        !"});
        return
    } else {
        let fileInfos = [];
        for (var i in files) {
            let file = files[i];
            let fileInfo = {};


            fs.renameSync('./upload/' + file.filename, './upload/' + file.originalname);//       。

            //        
            fileInfo.mimetype = file.mimetype;
            fileInfo.originalname = file.originalname;
            fileInfo.size = file.size;
            fileInfo.path = file.path;

            fileInfos.push(fileInfo);
        }
        //          
        res.set({
            'content-type': 'application/json; charset=utf-8'
        });
        res.end("success!");
    }
});
4、ファイルの簡単なアップロードが実現されました.もちろんこれは簡単にアップロードするだけです.ファイルの大きさやディスクの大きさなども考慮しなければなりません.もちろんアップロードファイルも一つではありません.ファイルをアップロードするにはもちろんダウンロードが必要です.圧縮したファイルは直接にaタグでダウンロードできます.しかし、時には写真などのブラウザで直接開けます.とても友好的ではないので、専用のダウンロードがあります.
4.1ダウンロードは主に2つの方法があり、比較的簡単で、直接的なデモを行う.
//     
  let road="           (     ,    ,      )";
  res.download(road); //    download    

  //     
  let road="           (     ,    ,      )";
  let road = fs.createReadStream(path); //       
  res.writeHead(200, {
    'Content-Type': 'application/force-download',
    'Content-Disposition': 'attachment; filename=name'
  });
  load.pipe(res);//