Допустим, я получил список каталогов файлов .jpg и затем хочу их отобразить
const fs = require('fs');
fs.readDirSync(someAbsolutePathToFolder)
.filter(f => f.endsWith('.jpg'))
.forEach(filename => {
const img = new Image();
const filepath = path.join(someAbsolutePathToFolder, filename);
img.src = `file://${filepath.replace(/\\/g, '/')}`;
document.body.appendChild(img);
});
Это не удастся. В качестве одного примера, если список, который я получил, имел имена вроде
#001-image.jpg
#002-image.jpg
, то приведенный выше код приводит к URL-адресам, таким как
file://some/path/#001-image.jpg
, которые, как вы видите, являются проблемой. URL будет сокращен до #
.
. В этом ответе утверждается, что я должен использовать encodeURI
, но это также не помогает, поскольку оставляет #
без выхода.
Использование encodeURIComponent
также не работает. Он заменяет /
и :
и пробел, и Electron не находит файл, по крайней мере, не на Windows.
До этого момента у меня было что-то подобное
const filepath = path.join(someAbsolutePathToFolder, filename).replace(/\\/g, '/');
img.src = `file://${filepath.split('/').map(encodeURIComponent).join('/')}`;
но это также не срабатывает на windows, потому что буквы дисков конвертируются из c:\dir\file
в c%3a\dir\file
, что затем представляется относительным путем к электрону.
Так что у меня есть особые случаи, пытаясь проверить [a-z]:
в начале пути, а также \\
для путей ООН C.
Сегодня я столкнулся с проблемой #
, упомянутой выше, и я ожидаю, что больше бомб замедленного действия ждут меня так я спрашиваю ...
Как правильно преобразовать имя файла в URL кроссплатформенным способом?
Или, если быть более точным c, как решить проблему выше. При заданном в каталоге списке абсолютных путей к файлам изображений на локальной платформе генерируются URL-адреса, которые будут загружать эти изображения, если они назначены свойству src
изображения.