javascript - 为什么使用writeStream在nodejs中写入比原始文件更大的文件?
问题描述
我正在尝试将文件写入磁盘,该文件以 json 请求有效负载中的 base64 字符串形式出现。我尝试了writeFile和writeStream,它没有错误,但是当我尝试将保存的文件作为可执行文件(deb / exe)运行时 - 它显示错误(tar.gz文件上的一些二进制数据并且没有file_to_app结果显示在deb文件上)。我可以看到通过 nodejs 保存的磁盘上的文件比原始文件大 10-30 个字节。什么会导致这个问题?
const createProductLink = async (app, product) => {
try {
const err = new Error();
let filename = null;
let correctTypeFlag = null;
let temp = null;
let extData = null;
let appFormat = null;
let pathPrefix = null;
let appType = null;
if (app.data) {
[extData] = app.data.split(';');
[temp, appType] = extData.split(':');
[temp, appFormat] = appType.split('/');
const extension = getExtension(appFormat);
const platform = app.platform.split(' ')[0].toLowerCase();
console.log(appType, appFormat, extension);
pathPrefix = getPathPrefix(platform);
correctTypeFlag = appTypes.includes(extension);
if (!correctTypeFlag) {
err.name = 'Validation Error';
err.message = 'Wrong file format';
throw err;
}
const file = Buffer.from(app.data, 'base64');
if (file.byteLength > 1024 * 1024 * 300) {
err.name = 'Validation Error';
err.message = 'Application size should be less than or equal to 300 MB.';
throw err;
}
filename = `${product.replace(/\s/g, '')}-${app.version}_${app.releaseDate}.${extension}`;
}
return new Promise(async (resolve, reject) => {
const dest = `${appPathPrefix}${pathPrefix}${filename}`;
const wStream = fs.createWriteStream(path.join(__dirname, dest));
await wStream.write(file);
wStream.on('finish', (error) => {
if (error) throw error;
app.link = dest;
resolve(app.link);
});
wStream.on('error', (error) => { console.log('error ', error); reject(error); });
wStream.on('close', () => console.log('closed'));
wStream.end();
resolve(dest);
}).catch(error => { throw error; });
} catch (err) {
throw err;
}
};
解决方案
推荐阅读
- java - 如何修复“原始错误:“命令”以代码 1 退出”;标准错误:''; 代码:'1''
- azure - 用于更新 Azure 中标签的 PowerShell 脚本
- laravel - Laravel 包安装 “包”命名空间中没有定义命令
- php - 从两个表中获取数据时,我怎样才能使它不重复相同的结果?
- g1ant - mouse.click 命令循环工作?
- c++ - boost::asio::deadline_timer cancel() 方法没有调用定时器处理程序
- typescript - serviceWorker 找不到全局变量
- excel - 在excel中提取姓名
- python - 1个熊猫数据框中的时间序列条件滚动平均值
- amazon-web-services - 如何在无服务器中将 aws 堆栈名称与其他字符串连接起来?