Тема: Не можу зрозуміти як конвертувати File що приходить з клієнта в буфер
Я надсилаю з клієнта файл, витягую з запита в контроллері і передаю в функцію
const md5 = require('md5')
const fs = require('fs')
const path = require('path')
const cfg = {
sizeLimit: 100 * 1000 * 1000,
}
const getHash = (file) => {
const date = new Date()
return md5(`${file.name}-${date.toString()}`)
}
const getExt = (file) => {
return file.name.split('.')[file.name.split('.').length - 1]
}
const verifySize = (file) => {
if (file.size > cfg.sizeLimit) {
return { error: true, textUk: 'Надто великий файл' }
}
}
const verifyExt = (file) => {
const extListString = 'jpg,jpeg,png,webp,webm,mp4,doc,txt,pdf'
const extList = extListString.split(',')
const ext = getExt(file)
if (extList.includes(ext)) {
return { error: true, textUk: `Формат файлу .${ext} не підтримується. Дозволені формати - ${extListString}` }
}
}
const uploadDir = '../public/files';
console.log(uploadDir)
module.exports = (file) => {
verifySize(file)
verifyExt(file)
return new Promise((resolve, reject) => {
const hash = getHash(file)
const ext = getExt(file)
console.log(hash, ext)
console.log(file)
fs.writeFile(
uploadDir + `/${hash}.${ext}`,
file,
err => {
if (err) {
return reject(err)
}
resolve({
url: `/files/${hash}.${ext}`
})
}
)
})
}
Приходить в функцію такий об'єкт
File {
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
size: 33311,
path: 'C:\\Users\\shtye\\AppData\\Local\\Temp\\upload_777afc98ac96b2603f472c6f91d1260a',
name: 'photo_2021-04-01_21-46-42.jpg',
type: 'image/jpeg',
hash: null,
...
Проблема виникає на етапі fs.writeFile
error TypeError [ERR_INVALID_ARG_TYPE]: The "data" argument must be of type string or an instance of Buffer, TypedArray, or DataView. Received an instance of File
at Object.writeFile (fs.js:1487:5)
Я розумію що об'єкт File треба якось перетворити в Buffer. Пробував Buffer.from(file) але виникає помилка в buffer.
Не особливо розумію як ці об'єкти працюють
Помилка напевно в чомусь дуже тупому але через малий досвід роботи з файлами не можу знайти свою хибу.
Буду дуже вдячний за допомогу