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