nodejs文件下載及上傳

1.文件下載

我們知道在html5中可以以a標簽的形式輕松實現(xiàn)文件下載,如下:

<a href="test.zip" download>下載文件</a>

但是這種做法的不足在于,對于.html/.txt/ .jpg等文件,有些瀏覽器會直接打開,所以考慮瀏覽器差異,需要謀求更通用的一種方式。

nodejs下載文件方式為,設置響應頭,文件傳輸方式分為兩種:

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");


//創(chuàng)建服務器
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";
        //執(zhí)行里面的回調(diào)函數(shù)的時候,表單已經(jīng)全部接收完畢了。
        form.parse(req, function(err, fields, files) {
            //使用第三方模塊silly-datetime
            var t = sd.format(new Date(),'YYYYMMDDHHmmss');
            //生成隨機數(shù)
            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");
        });
    }
});
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評論 19 139
  • 本文包括:1、文件上傳概述2、利用 Commons-fileupload 組件實現(xiàn)文件上傳3、核心API——Dis...
    廖少少閱讀 12,753評論 5 91
  • 請參看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon閱讀 7,791評論 2 19
  • 今天閱讀《寫作法寶》——19章自己的聲音,從205頁至214頁,共十頁。 “不要猶豫,要模仿其他作家,模仿對于任何...
    2081梁閱讀 320評論 0 1
  • 每個人會有不同的思維習慣,不同的作息,不同的圈子,不同的應激反應,不同的空間使用習慣。我一時想不出什么更合...
    磊磊popo閱讀 1,141評論 6 5

友情鏈接更多精彩內(nèi)容