首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在node.js中安全地将本地文件路径转换为文件::?/ url?

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

Stack Overflow用户
提问于 2013-12-17 03:41:36
回答 3查看 36.9K关注 0票数 22

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

我现在正在研究https://en.wikipedia.org/wiki/File_URI_scheme,我觉得这肯定是一个已经解决的问题,必须有人有一个代码片段或npm模块来做这件事。

但是后来我试着在npm上搜索这个,但我得到了太多的麻烦,这并不好笑(文件,url和路径是搜索命中的,就像每个包一样:) google也是如此。

我可以用这种天真的方法

代码语言:javascript
运行
复制
site = path.resolve(site);
if (path.sep === '\\') {
    site = site.split(path.sep).join('/');
}
if (!/^file:\/\//g.test(site)) {
    site = 'file:///' + site;
}

但我很确定这不是一条正确的道路。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-29 20:14:32

使用file-url module

代码语言:javascript
运行
复制
npm install --save file-url

用法:

代码语言:javascript
运行
复制
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。而且代码非常简单,以防您只想获取一个代码片段:

代码语言:javascript
运行
复制
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);
};
票数 26
EN

Stack Overflow用户

发布于 2018-12-14 23:52:38

Node.js v10.12.0提供了两种新的方法来解决这个问题:

代码语言:javascript
运行
复制
const url = require('url');
url.fileURLToPath(url)
url.pathToFileURL(path)

文档

票数 36
EN

Stack Overflow用户

发布于 2018-04-17 02:41:15

我有一个类似的issue,但最终解决方案是使用新的WHATWG URL实现:

代码语言:javascript
运行
复制
const path = 'c:\\Users\\myname\\test.swf';
const u = new URL(`file:///${path}`).href;
// u = 'file:///c:/Users/myname/test.swf'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20619488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档