nodejsファイルのダウンロードとアップロード

2922 ワード

index
nodejsファイルのダウンロードとアップロード_veblen
1.ファイルのダウンロードhtml5では、aラベルの形式でファイルのダウンロードが簡単に実現できることを知っています.以下のようにします.
ファイルのダウンロード


しかし、このようなやり方の不足は、.html/.txt/.jpgなどのファイルに対して、直接開くブラウザがあるため、ブラウザの違いを考慮して、より汎用的な方法を求める必要があることである.
Nodejsダウンロードファイル方式は、応答ヘッダを設定し、ファイル転送方式は2つに分けられます.
1.1ファイルを直接読み込む
fs.readFile(filePath, function(isErr, data){  
       if (isErr) {  
              res.end("Read file failed!");  
              return;  
        }  
        res.writeHead(200,{  
              'Content-Type': 'application/octet-stream', //                
              'Content-Disposition': 'attachment; filename=' + fileName, //                  
        });  
        res.end(data)  
})


1.2 stream
res.writeHead(200,{  
              'Content-Type': 'application/octet-stream', //                
              'Content-Disposition': 'attachment; filename=' + fileName, //                  
});  
fs.createReadStream(filePath).pipe(res);


2.ファイルアップロード
formidableモジュールの使用
var http = require("http");
var formidable = require('formidable');
var fs = require("fs");
var util = require("util");
var sd = require("silly-datetime");
var path = require("path");

//     
var server = http.createServer(function(req,res){
    //           ,       post
    if(req.url == "/uploads" && req.method.toLowerCase() == "post"){
        //Creates a new incoming form.
        var form = new formidable.IncomingForm();
        //          
        form.uploadDir = "./uploads";
        //            ,           。
        form.parse(req, function(err, fields, files) {
            //       silly-datetime
            var t = sd.format(new Date(),'YYYYMMDDHHmmss');
            //     
            var ran = parseInt(Math.random() * 8999 +10000);
            //     
            var extname = path.extname(files.tupian.name);
            //    
            var oldpath = __dirname + "/" + files.tupian.path;
            //    
            var newpath = __dirname + '/uploads/'+t+ran+extname;
            //  
            fs.rename(oldpath,newpath,function (err) {
                if(err){
                    throw  Error("    ");
                }
                res.writeHead(200, {'content-type': 'text/plain'});
                res.end("  ");
            });

            //      、   ,  fields  ;
            //      ,files
            res.writeHead(200, {'content-type': 'text/plain'});

            res.end("success");
        });
    }
});