nodejs文件下载及上传

1.文件下载

文件下载有很多种方式,我们下面看一下 node 下载的方式

1.1使用a 标签下载

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

1.2使用node 下载

nodejs下载文件方式为,设置响应头,文件传输方式分为两种:

1.2.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.2stream
res.writeHead(200,{  
              'Content-Type': 'application/octet-stream', //告诉浏览器这是一个二进制文件  
              'Content-Disposition': 'attachment; filename=' + fileName, //告诉浏览器这是一个需要下载的文件  
});  
fs.createReadStream(filePath).pipe(res);  

2.文件上传

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");
        });
    }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ts_shinian_web

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值