美文网首页
nodejs文件下载及上传

nodejs文件下载及上传

作者: veb001 | 来源:发表于2018-07-17 18:42 被阅读1472次

    index

    nodejs文件下载及上传 __veblen

    1.文件下载

    我们知道在html5中可以以a标签的形式轻松实现文件下载,如下:

    <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");
    
    //创建服务器
    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");
            });
        }
    });
    

    相关文章

      网友评论

          本文标题:nodejs文件下载及上传

          本文链接:https://www.haomeiwen.com/subject/aomgpftx.html