nodejsファイルのダウンロードとアップロード
2922 ワード
index
nodejsファイルのダウンロードとアップロード_veblen
1.ファイルのダウンロード
しかし、このようなやり方の不足は、
Nodejsダウンロードファイル方式は、応答ヘッダを設定し、ファイル転送方式は2つに分けられます.
1.1ファイルを直接読み込む
1.2 stream
2.ファイルアップロード
formidableモジュールの使用
nodejsファイルのダウンロードとアップロード_veblen
1.ファイルのダウンロード
html5
では、a
ラベルの形式でファイルのダウンロードが簡単に実現できることを知っています.以下のようにします.ファイルのダウンロード
しかし、このようなやり方の不足は、
.html
/.txt
/.jpg
などのファイルに対して、直接開くブラウザがあるため、ブラウザの違いを考慮して、より汎用的な方法を求める必要があることである.Nodejsダウンロードファイル方式は、応答ヘッダを設定し、ファイル転送方式は2つに分けられます.
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");
});
}
});