Sunday, June 2, 2024
61
rated 0 times [  62] [ 1]  / answers: 1 / hits: 24634  / 10 Years ago, fri, july 18, 2014, 12:00:00

How do you convert a local (filesystem) URI to path?

It can be done with nsIIOService + newURI() + QueryInterface(Components.interfaces.nsIFileURL) + file.path but that seems like a long way.

Is there a shorter way?



Here is an example code:



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-fileroot.png

More From » firefox-addon

 Answers
12

The supported way is actually what you're already doing. Write yourself a helper function if you find it too verbose. Of course, you can shorten it a bit using the various helpers.



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;


Or:



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;

[#70161] Wednesday, July 16, 2014, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
jarod

Total Points: 62
Total Questions: 111
Total Answers: 83

Location: Saint Vincent and the Grenadines
Member since Sat, Sep 11, 2021
3 Years ago
jarod questions
;