您的位置:首页 > Web前端 > Node.js

Meteor node.js 复制(copy)文件的方法

2015-06-02 10:43 441 查看
原文:/article/9867473.html

以下三种方法中请注意加:

var exec = Npm.require('child_process').exec;

var fs =Npm.require('fs');


1. 原文件在private目录下,用Meteor 的Assets读取内容,使用node.js的fs.writeFile()写入,这种方法只能适用文本文件

var copyFile=function(){

//检测目标文件是否存在
fs.open( FILE_STORE_AB_PATH+"/aapt",'r',function(err,fd){//fs.open()只能用绝对路径
if (err && err.code=='ENOENT') {
console.log('aapt not exists copy....');

fs.writeFile(aapt, Assets.getText('aapt'), function (err) {
if (err) throw err;
console.log('It\'s saved!');
// fs.chmodSync(aapt,777);
});

}else{
console.log('aapt exists');
}
});
}

2.用node.js的fs来读写流来读取与写入,但这种方法的目标文件如果是执行文件的话,会没有执行权限。
var copyFile=function(){

fs.open( FILE_STORE_AB_PATH+"/aapt",'r',function(err,fd){//fs.open()只能用绝对路径
if (err && err.code=='ENOENT') {
console.log('aapt not exists copy....');

//这种方法没有执行权限
var readable = fs.createReadStream(PROJECT_ROOT_DIRECTORY+'/private/aapt');
// 创建写入流
var writable = fs.createWriteStream(FILE_STORE_AB_PATH+"/aapt");
// 通过管道来传输流
readable.pipe( writable );

//不知为什么这个方法不起作用,改不了权限
//fs.chmodSync(FILE_STORE_AB_PATH+"/aapt",777);

}else{
console.log('aapt exists');
}
});
}

3. 使用node.js调用bash命令cp 来复制,这样复制的文件同时有了执行权限
var copyFile=function(){

fs.open( FILE_STORE_AB_PATH+"/aapt",'r',Meteor.bindEnvironment(function(err,fd){//fs.open()只能用绝对路径
if (err && err.code=='ENOENT') {
console.log('aapt not exists copy....');

incopy=true;
exec('cp '+PROJECT_ROOT_DIRECTORY+'/private/aapt '+FILE_STORE_AB_PATH, Meteor.bindEnvironment(function(error, stdout, stderr) {
console.log('It\'s cpoyed!');
incopy=false;
}));

}else{
console.log('aapt exists');
}
}));

}

原文:/article/9867473.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: