javascript - 如何从节点js中的缓冲区中找到损坏的文件
问题描述
实际上我从 apolloGraphQl 上传了一个文件,然后我在 createReadStream 中有一个文件,这是它的承诺。现在我想在保存之前确保这个文件是图像。如何知道该文件没有损坏?
这是我的节点 js 代码:
const fs = require('fs');
const path = require('path');
const mkdirp = require('mkdirp');
const FileType = require('file-type');
let UploadAvatar = async(_ , args) => {
//save image function
let saveImage = ({stream, extention}) => {
const dir = `../public/avatar`;
const date = `${new Date().getTime()}`;
mkdirp.sync(path.join(__dirname, `${dir}`));
const filePath = `${dir}/${date}.${extention}`;
return new Promise((resolve, reject) => {
stream
.pipe(fs.createWriteStream(path.join(__dirname, `${filePath}`)))
.on(`error`,error => reject({error}))
.on('finish', () => resolve({filePath}))
})
}
const {createReadStream, mimetype} = await args.image;
const stream = createReadStream();
//get extention
const extention = mimetype.split('/').pop();
//save file
const { filePath } = await saveImage({ stream, extention});
console.log(filePath);
}
module.exports = UploadAvatar;
保存文件工作正常。但我也可以保存损坏的文件!
还有一点我不得不提的是:我通过 react apollo-upload-client 上传文件。然后 args.image 变量内容:
args.image = {
filename: 'fileName',
mimetype: 'image/jpeg',
encoding: '7bit',
createReadStream: [Function: createReadStream]
}
这种 mimetype 不可靠。