Как преобразовать имя файла в URL в Electron? - PullRequest
1 голос
/ 31 марта 2020

Допустим, я получил список каталогов файлов .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 изображения.

1 Ответ

0 голосов
/ 31 марта 2020

Это прекрасно работает для меня:

const open = require('open')
const path = require('path')

const FILE_NAME = 'картинка.jpg'
const filePath  = path.join(__dirname, FILE_NAME)
const fileUrl = `file:///${ filePath.split('\\').join('/') }`

console.log(fileUrl)
open(fileUrl)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...