Ситуация
Чего я хочу добиться, это загрузить изображение в буфер, хэшировать его, , затем сохранить его.
Я не могу записать на диск до хэширования.
Код (внутри Обещания)
const filename = this.getPathFromHash(hash);
if (!fs.existsSync(path.dirname(filename))) fs.mkdirSync(path.dirname(filename));
fs.writeFile(filename, body, 'binary', (e) => {
if (e) reject(e);
parser.MediumVersion.create({
hash, url, type, size, width, height,
}).then(resolve).catch(reject);
});
Результат
повреждение файла, но он создал файлы:)
Редактировать: IrFanView говорит, что это JPEG с неправильным расширением, затем он просто говорит , а не файл JPEG, начинается с (два случайных байта здесь)
Edit2: Что это такое ??Четыре байта 0xfd?Что они имеют в виду?В противном случае заголовок изображения выглядит нормально.

Edit3: удаление этих байтов не решает проблему: / Может быть, кодирование является виновником?Я попытался изменить его на UTF-8
, пока что не повезло.
Edit4: Быстрое сравнение!Первый загружен с использованием моей программы, второй - Chrome.

Структура каталогов
Я знаю, я знаю, SHA-256хэши длиной 64 символа.Для простоты я собираюсь использовать 8 символов.
Учитывая хеш 0123abcd
, создайте каталог 01
(если он не существует (slice(0,2)
), затем поместитефайл с именем 23abcd
(slice(2)
). Я видел эту структуру во многих кэшах.
Пример:
01/
23abcd
45abcd
ab/
cdef01
010101