Как вы конвертируете локальный URI в путь?
Как преобразовать локальный (файловая система) URI в путь?
Это может быть сделано с nsIIOService
+ newURI()
+ QueryInterface(Components.interfaces.nsIFileURL)
+ file.path
но это похоже на долгий путь.
Есть ли более короткий путь?
Вот пример кода:
var aFileURL = 'file:///C:/path-to-local-file/root.png';
var ios = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var url = ios.newURI(aFileURL, null, null); // url is a nsIURI
// file is a nsIFile
var file = url.QueryInterface(Components.interfaces.nsIFileURL).file;
console.log(file.path); // "C:\path-to-local-file\root.png"
1 ответ
Решение
Поддерживаемый способ - это то, что вы уже делаете. Напишите себе вспомогательную функцию, если вы найдете ее слишком многословной. Конечно, вы можете немного сократить его, используя различные помощники.
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/Services.jsm");
var aFileURL = 'file:///C:/path-to-local-file/root.png';
var path = Services.io.newURI(aFileURL, null, null).
QueryInterface(Ci.nsIFileURL).file.path;
Или же:
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/NetUtil.jsm");
var aFileURL = 'file:///C:/path-to-local-file/root.png';
var path = NetUtil.newURI(aFileURL).QueryInterface(Ci.nsIFileURL).file.path;