vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip

2020-06-16 06:59:15易采站长站整理

const fs = require("fs");
const compressing = require("compressing"); //压缩文件夹用

接口代码


router.post("/txtToMp3", async function (req, res, next) {
let form = new formidable.IncomingForm();
form.encoding = "utf-8"; //编码
form.uploadDir = path.join(__dirname + "/../txt"); //保存上传文件地址
form.keepExtensions = true; //保留后缀

form.parse(req, function (err, fields, files) {
let filename;
filename = files.file.name;

let nameArray = filename.split("."); //分割
let type = nameArray[nameArray.length - 1];
let name = "";
for (let i = 0; i < nameArray.length - 1; i++) {
name = name + nameArray[i];
}
let date = new Date();
let time = "_" + date.getTime();
let avatarName = name + time + "." + type;
let newPath = form.uploadDir + "/" + avatarName;
fs.renameSync(files.file.path, newPath); //移动文件
fs.readFile(newPath, "utf-8", function (err, data) {
if (err) {
console.log(err);
new Result(null, "读取失败").fail(res);
} else {
let client = new AipSpeech(
0,
"百度语音合成key",
"百度语音合成secret"
);

let resultData = data.split("n");
let number = resultData.length;
let formTime = new Date().getTime();
let mp3FileDir = path.join(__dirname + "/../mp3_" + formTime);
fs.mkdirSync(mp3FileDir);
for (let i in resultData) {
setTimeout(function(){
if (resultData[i].indexOf("|||") != -1) {
let text = resultData[i].split("|||")[1];
// 语音合成,保存到本地文件
client.text2audio(text, { spd: 4, per: 4 }).then(
function (result) {
if (result.data) {
let time = resultData[i].split("|||")[0] + "_voice";
let avatarName_mp3 = mp3FileDir + "/" + time + ".mp3";
fs.writeFileSync(avatarName_mp3, result.data);
number--;
if (number == 0) {
let zipFileName = "zip/mp3_" + formTime + ".zip";
compressing.zip
.compressDir(mp3FileDir, zipFileName)
.then(() => {
let item = {
url: zipFileName,
};
new Result(item, "压缩成功").success(res);
})
.catch((err) => {
new Result(null, "压缩失败").fail(res);
});
}
} else {
// 合成服务发生错误
new Result(null, "合成失败").fail(res);
}
},
function (err) {
console.log(err);
}
);
} else {
new Result(null, "文件格式错误").fail(res);
}