如何在node.js中安全地将本地文件路径转换为文件::?/ url?

时间:2013-12-16 19:41:36

标签: javascript node.js url npm

我有本地文件路径(在node.js中),我需要将它们转换为file://网址。

我现在正在查看https://en.wikipedia.org/wiki/File_URI_scheme,我觉得这必须是一个已解决的问题,并且有人必须有一个片段或npm模块来执行此操作。

但是后来我尝试搜索npm这个但是我得到了太多的瑕疵它不好笑(文件,网址和路径都是像每个包一样的搜索命中率:)与google和SO相同。

我可以做这种天真的方法

site = path.resolve(site);
if (path.sep === '\\') {
    site = site.split(path.sep).join('/');
}
if (!/^file:\/\//g.test(site)) {
    site = 'file:///' + site;
}

但我很确定这不是可行的方法。

3 个答案:

答案 0 :(得分:18)

使用file-url module

npm install --save file-url

用法:

var fileUrl = require('file-url');

fileUrl('unicorn.jpg');
//=> file:///Users/sindresorhus/dev/file-url/unicorn.jpg 

fileUrl('/Users/pony/pics/unicorn.jpg');
//=> file:///Users/pony/pics/unicorn.jpg

也适用于Windows。代码很简单,以防你想要一个片段:

var path = require('path');

function fileUrl(str) {
    if (typeof str !== 'string') {
        throw new Error('Expected a string');
    }

    var pathName = path.resolve(str).replace(/\\/g, '/');

    // Windows drive letter must be prefixed with a slash
    if (pathName[0] !== '/') {
        pathName = '/' + pathName;
    }

    return encodeURI('file://' + pathName);
};

答案 1 :(得分:7)

Node.js v10.12.0仅提供了两种新方法来解决此问题:

const url = require('url');
url.fileURLToPath(url)
url.pathToFileURL(path)

文档

答案 2 :(得分:1)

我有一个类似的issue,但最终解决方案是使用新的desired_elements = [] linkerHref_list = response.css('body').xpath("//*[@href]") for link in linkerHref_list : test = link.get_attribute("href") desired_elements.append(test) 实现:

WHATWG URL