2

ローカル (ファイルシステム) URI をパスに変換するにはどうすればよいですか? + + +
で実行できますが、それは長い道のりのようです。 もっと短い方法はありますか?nsIIOServicenewURI()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"
4

1 に答える 1

5

サポートされている方法は、実際にすでに行っていることです。ヘルパー関数が冗長すぎる場合は、自分で作成してください。もちろん、さまざまなヘルパーを使用して少し短くすることもできます。

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;
于 2014-07-19T20:47:55.153 に答える