Node.js-nodejs可否读取远程文件到本地 有没有像php file

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js-nodejs可否读取远程文件到本地 有没有像php file相关的知识,希望对你有一定的参考价值。

nodejs对文件的读写还是相当灵活的,可以根据不同的场景来选择不同的方法。

一.直接操作文件
最简单的两个fs.readFile和fs.writeFile
  举例:这个程序的功能是将一个比较大json格式的文件转换成你想自己要格式的文件。
var fs = require('fs');
fs.readFile('./json.json',function(err,data)
if(err) throw err;

var jsonObj = JSON.parse(data);
var space = ' ';
var newLine = '\n';
var chunks = [];
var length = 0;

for(var i=0,size=jsonObj.length;i<size;i++)
var one = jsonObj[i];
//what value you want
var value1 = one['value1'];
var value2 = one['value2'];
....
var value = value1 +space+value2+space+.....+newLine;
var buffer = new Buffer(value);
chunks.push(buffer);
length += buffer.length;


var resultBuffer = new Buffer(length);
for(var i=0,size=chunks.length,pos=0;i<size;i++)
chunks[i].copy(resultBuffer,pos);
pos += chunks[i].length;


fs.writeFile('./resut.text',resultBuffer,function(err)
if(err) throw err;
console.log('has finished');
);

);

它的原理是将文件数据一次性全部读入内存,优点就是接下来都是在内存的操作,速度会很快。但缺点也很明显,就是当文件非常大时,会造成内存溢出。
二. 使用文件流
   2.1 读取文件,api相见:fs.createReadSream 和 fs.createWriterStream
以下代码实现的功能就是通过文件流来实现图片的复制:
var fs = require('fs');
var rOption =
flags : 'r',
encoding : null,
mode : 0666


var wOption =
flags: 'a',
encoding: null,
mode: 0666


var fileReadStream = fs.createReadStream('./myjpg.jpg',rOption);
var fileWriteStream = fs.createWriteStream('./new_myjpg.jpg',wOption);

fileReadStream.on('data',function(data)
fileWriteStream.write(data);

);

fileReadStream.on('end',function()
console.log('readStream end');
fileWriteStream.end();
);

这里再补充在流中非常有用的一个函数:pipe,它以用来把当前的可读流和另外一个可写流连接起来。可读流中的数据会被自动写入到可写流中。使用起来非常方便,依然实现上例中的功能:
var fs = require('fs');

var fileReadStream = fs.createReadStream('./myjpg.jpg');
var fileWriteStream = fs.createWriteStream('./new_myjpg.jpg');
fileReadStream.pipe(fileWriteStream);

fileWriteStream.on('close',function()
console.log('copy over');
);

用这个函数可以轻松地实现一个静态资源服务器:
var http = require("http");
var fs = require("fs"),
var path = require("path"),
var url = require("url");

var server = http.createServer(function(req, res)
var pathname = url.parse(req.url).pathname;
console.log(pathname);
var filepath = path.join("./tmp", "wwwroot", pathname);
console.log(filepath);
var stream = fs.createReadStream(filepath, flags : "r", encoding : null);
stream.on("error", function()
res.writeHead(404);
res.end();
);
stream.pipe(res);
);
server.on("error", function(error)
console.log(error);
);
server.listen(8088,function()
console.log('server listen on 8088');
);
参考技术A 可以尝试我开发的 前端开发 构建工具slow-cli

安装

npm install slow-cli -g

使用

在本地的html文件的目录下运行一次(以后就不用运行了)
slow init

然后运行

slow start

就可以了。 打开浏览器 localhost:3000/xx.html就可以 访问本地的html文件了。 详细的介绍可以看

https://github.com/huyinghuan/slow-cli/blob/master/README.zh.md本回答被提问者和网友采纳

读取远程 mp3 文件的 ID3 标签?

【中文标题】读取远程 mp3 文件的 ID3 标签?【英文标题】:Reading ID3 tags of a remote mp3 file? 【发布时间】:2010-04-09 08:51:14 【问题描述】:

Read MP3 Tags with Silverlight 让我开始阅读 id3 标签,但我意识到 taglib# online 处理本地文件路径?

有没有办法从远程文件中读取这些信息?

【问题讨论】:

【参考方案1】:

我最近为 Ruby 回答了同样的问题(见下文)——我很确定你可以做类似的事情。

想法是:

    使用 HTTP 1.1 或更高版本的协议,以及 Range HTTP 请求。

    下载 ID3v2-tag 的开头部分(100 字节)

    从下载的前几个字节,您可以确定完整 ID3v2 标签的正确长度,例如否

    下载文件的前 N ​​个字节(例如完整的 ID3v2-tag)

    为您的目的解析 ID3v2 标签

见:

Read ID3 Tags of Remote MP3 File in Ruby/Rails?

【讨论】:

【参考方案2】:

Tim Heuer 有一篇很好的博客文章介绍了这方面的内容。 http://timheuer.com/blog/archive/2010/01/30/reading-mp3-id3-tags-with-silverlight-taglib.aspx

和你一样,他也遇到了 TabLib# 只使用本地路径的问题。

TagLib# 没有的一件事是流输入实现。事实上,大多数库都假定了一个本地文件路径。幸运的是,该库是使用通用的“文件”接口编写的,所以我只需要创建自己的 StreamFileAbstraction。我选择在我的项目中而不是在基础库中执行此操作。这很容易,因为 LocalFileAbstraction 实际上在文件上执行了 Open 作为它的第一个任务并设置了一些公共变量。我的抽象基本上只是已经将流交给并准备好了。

在 Novell 网站上有一个使用文件抽象的示例。 http://developer.novell.com/wiki/index.php/TagLib_Sharp:_Examples

【讨论】:

以上是关于Node.js-nodejs可否读取远程文件到本地 有没有像php file的主要内容,如果未能解决你的问题,请参考以下文章

初学node.js-nodejs中实现修改用户路由

初学node.js-nodejs中实现用户注册路由

从本地复制到远程桌面时提示:无法复制文件,无法读取源文件或磁盘

钉盘可否同步镜像文件文件夹到本地磁盘?

Java读取远程服务器文件到本地

node.js如何将远程的文件下载到本地解压读取