Firefox 52 "Новый файл" изменения и ошибки
Я использую new File(file.path);
в загруженном привилегированном коде от Firefox 17.* до 51.*.file
является nsIFile
,
Начиная с Firefox 52, теперь он выдает ошибку: TypeError: Not enough arguments to File.
ссылка: Firefox 52 для разработчиков
API File and Directory Entries был обновлен и теперь содержит изменения в последней спецификации (подробности см. В сообщении об ошибке 1284987).
Что может быть примером правильного кода для использования сейчас для Firefox 52.*+?
Обновление по запросу:
// note: aFileURL is a local file
let aFileURL = 'file:///C:/Users/***/icon.png'; // just an example
let file = Services.io.newURI(aFileURL, null, null)
.QueryInterface(Components.interfaces.nsIFileURL).file; // convert URL to nsIFile
file = new File(file.path); // Firefox 52: TypeError: Not enough arguments to File.
1 ответ
Благодаря Макьен
ссылка: Использование DOM File API в коде Chrome
MDN заявил: var file = File.createFromFileName("path/to/some/file");
Следующий код не работал: (мое недоразумение)
// Using text URL
Components.utils.importGlobalProperties(['File']);
let aFileURL = 'file:///C:/Users/***/icon.png'; // just an example
let file = File.createFromFileName(aFileURL);
// "File error: Unrecognized path" nsresult: "0x80520001 (NS_ERROR_FILE_UNRECOGNIZED_PATH)"
Следующий код работает:
Components.utils.importGlobalProperties(['File']);
let aFileURL = 'file:///C:/Users/***/icon.png'; // just an example
let file = Services.io.newURI(aFileURL, null, null)
.QueryInterface(Components.interfaces.nsIFileURL).file; // convert URL to nsIFile
file = File.createFromFileName(file.path);
Следующий код также работает:
Components.utils.importGlobalProperties(['File']);
let aFileURL = 'file:///C:/Users/***/icon.png'; // just an example
let file = Services.io.newURI(aFileURL, null, null)
.QueryInterface(Components.interfaces.nsIFileURL).file; // convert URL to nsIFile
file = File.createFromNsIFile(file);
Дополнительная информация для справки:
С помощью file = new File([], file.path);
производит следующее:
File { name: "C:\Users\...\icon.png", lastModified: 1487509240391, lastModifiedDate: Date 2017-02-19T13:00:40.391Z, webkitRelativePath: "", mozFullPath: "", size: 0, type: "" }
Однако, используя file = File.createFromFileName(file.path);
производит следующее:
File { name: "icon.png", lastModified: 1403974172431, lastModifiedDate: Date 2014-06-28T16:49:32.431Z, webkitRelativePath: "", mozFullPath: "", size: 4294, type: "image/png" }
С помощью file = File.createFromNsIFile(file);
производит следующее:
File { name: "icon.png", lastModified: 1403974172431, lastModifiedDate: Date 2014-06-28T16:49:32.431Z, webkitRelativePath: "", mozFullPath: "C:\Users\...\icon.png", size: 4294, type: "image/png" }
Проходя file
от первого кода до FileReader()
дает неправильный результат. "data:application/octet-stream;base64,"
Проходя file
от 2-го и 3-го кода до FileReader()
дает правильный результат."data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAQjUlEQVR42uWbB3QU17nHv7uzq60S6sJGotniARGYUCQcZAvkhh0QosZgXPJsHwgJpiTB4Aq4JrafwTHvkZeYBBt4EELAGAwGhABjwEYgcMExEk1CjSIJaXuZyXdHO8v..."