当前位置: 首页 > Web前端 > vue.js

如何将Txt文件批量生成MP3并压缩成Zip(vue+node)

时间:2023-04-01 00:05:03 vue.js

看看效果。解压文件上传文件格式测试1|||测试1的文本测试2|||测试2的文本测试3|||测试3的文本测试4|||测试4的文本测试5|||测试5文本实现逻辑如下上传文件解析txt发送内容到百度语音合成生成文件夹放置合成的mp3文件压缩成zip发送zip地址到前端上传文件使用element-ui的el-上传组件request="UploadImage":on-change="fileChange":file-list="fileList">拖动文件到这里,或者点击上传

只上传txt文件,且不超过1M
上传前判断上传的文件是否符合要求onBeforeUploadImage(file){constisTxt=file.type==="text/plain";constisLt1M=file.size/1024/1024<1;if(!isTxt){this.$message.error("上传的文件只能是txt格式!");}if(!isLt1M){this.$message.error("上传的文件大小不能超过1MB!");}returnisTxt&&isLt1M;}一次只上传一个文件,更新文件列表时清空之前的文件fileChange(file){letobj=this.onBeforeUploadImage(file.raw);如果(对象){这个。$refs。上传.clearFiles();this.fileList=[{name:file.name,url:file.url}];}}主要上传功能UploadImage(param){this.loading=true;constformData=newFormData();formData.append("文件",param.file);this.$axios({url:process.env.VUE_APP_BASE_API+"api/txtToMp3",method:"post",data:formData}).then(response=>{if(response.data.code==0){this.loading=false;this.dialogVisible=true;this.url=response.data.data.url;}}).catch(error=>{console.log(error);});}使用的依赖项节点代码constformidable=require("formidable");//获取上传的txt并保存constpath=require("path");constAipSpeech=require("baidu-aip-sdk").speech;//百度语音合成sdkconstfs=require("fs");常量压缩ing=require("压缩");//压缩文件夹的接口代码router.post("/txtToMp3",asyncfunction(req,res,next){letform=newformidable.IncomingForm();form.encoding="utf-8";//编码表单.uploadDir=path.join(__dirname+"/../txt");//保存上传文件地址form.keepExtensions=true;//保留后缀form.parse(req,function(err,fields,files){letfilename;filename=files.file.name;letnameArray=filename.split(".");//拆分lettype=nameArray[nameArray.length-1];letname="";for(leti=0;i{letitem={url:zipFileName,};newResult(item,"压缩成功。").success(res);}).catch((err)=>{newResult(null,"compressionfailed").fail(res);});}}else{//合成服务出错newResult(null,"Synthesisfailed").fail(res);}},函数(err){console.log(err);});}else{newResult(null,"文件格式错误").fail(res);}},我*20)}}});});});PS:在节点部分,在判断是否所有需要合成的文件都完成时,我是通过number等于0的值来判断完成的,不知道有没有什么好的大家伙的方式不?