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

nodejs文件下载及上传

作者: Veb | 来源:发表于2018-06-29 20:29 被阅读0次

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文件下载及上传

    1.文件下载 我们知道在html5中可以以a标签的形式轻松实现文件下载,如下: 但是这种做法的不足在于,对于.ht...

  • nodejs文件下载及上传

    index nodejs文件下载及上传 __veblen 1.文件下载 我们知道在html5中可以以a标签的形式轻...

  • node安装(linux)

    1、下载 https://nodejs.org/zh-cn/download/ 2、上传 rz上传文件 3、解压 ...

  • win系统下nodejs安装及环境配置

    win系统下nodejs安装及环境配置 第一步:下载安装文件下载nodejs,官网:http://nodejs.o...

  • 前端干货链接-持续更新

    前端文件上传 拖拽上传、图片预览、文件上传nodejs-process-excel :nodejs解析或导出exc...

  • NodeJS 文件的上传与下载

    网上虽然有各种实例,可在实际使用中,存在各种问题,同时对错误并没有完善的处理。所以经过反复的调试,成功后,在此做个...

  • linux下安装nodejs

    官网下载安装nodejs http://nodejs.cn/download/ 上传node到linux服务器上传...

  • Swift网络编程(二)文件上传/下载

    一.前言 iOS开发中和服务器打交道除了数据请求外,还有文件的上传及下载,OC中文件上传及下载,笔者就不多说了,今...

  • node 图片上传 文件上传 multer

    nodejs文件上传炒鸡清楚版 我们需要下载模块 fileFilter 设置自定义过滤方法 storage 设置文...

  • Mac安装配置nodeJS

    一、下载NodeJS 下载地址:http://nodejs.cn/download/ 二、打开文件 三、打开文件依...

网友评论

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

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