电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

vue + node如何通過一個Txt文件批量生成MP3并壓縮成Zip

瀏覽:25日期:2023-01-16 16:41:31

看看效果叭

vue + node如何通過一個Txt文件批量生成MP3并壓縮成Zip

解壓的文件

vue + node如何通過一個Txt文件批量生成MP3并壓縮成Zip

上傳的文件格式

測試1|||測試1的文字測試2|||測試2的文字測試3|||測試3的文字測試4|||測試4的文字測試5|||測試5的文字

實現的邏輯如下

上傳文件 解析txt 發送內容至百度語音合成 生成文件夾放置本次合成的mp3文件,并壓縮成zip 發送zip的地址給前端

使用了 element-ui 的 el-upload 組件

<el-upload v-loading='loading' drag ref='upload' action='#' accept='.txt' :before-upload='onBeforeUploadImage' :http-request='UploadImage' :on-change='fileChange' :file-list='fileList' > <i class='el-icon-upload'></i> <div class='el-upload__text'> 將文件拖到此處,或 <em>點擊上傳</em> </div> <div slot='tip'>只能上傳txt文件,且不超過1M</div></el-upload>

在上傳之前判斷上傳的文件是否符合要求

onBeforeUploadImage(file) { const isTxt = file.type === 'text/plain'; const isLt1M = file.size / 1024 / 1024 < 1; if (!isTxt) { this.$message.error('上傳文件只能是txt格式!'); } if (!isLt1M) { this.$message.error('上傳文件大小不能超過 1MB!'); } return isTxt && isLt1M;}

一次只上傳一個文件,在文件列表更新時先清除之前的文件

fileChange(file) { let obj = this.onBeforeUploadImage(file.raw); if (obj) { this.$refs.upload.clearFiles(); this.fileList = [{ name: file.name, url: file.url }]; }}

上傳的主要函數

UploadImage(param) { this.loading = true; const formData = new FormData(); formData.append('file', 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); });}

node代碼

用到的依賴項

const formidable = require('formidable'); //獲取上傳的txt,并保存const path = require('path'); const AipSpeech = require('baidu-aip-sdk').speech; //百度語音合成sdkconst 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); }},i * 20) } } }); });});

PS:

在node部分,在判斷需要合成的文件是否全部完成時,我是通過number的值等于0判斷完成,不知道大佬們有啥好方法不?

到此這篇關于vue + node如何通過一個Txt文件批量生成MP3并壓縮成Zip的文章就介紹到這了,更多相關vue node批量生成MP3內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
主站蜘蛛池模板: 杭州顺源过滤机械有限公司官网-压滤机_板框压滤机_厢式隔膜压滤机厂家 | 济南轻型钢结构/济南铁艺护栏/济南铁艺大门-济南燕翔铁艺制品有限公司 | 江苏南京多语种翻译-专业翻译公司报价-正规商务翻译机构-南京华彦翻译服务有限公司 | 电缆接头_防水接头_电缆防水接头_防水电缆接头_上海闵彬 | 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 | 合肥宠物店装修_合肥宠物美容院装修_合肥宠物医院设计装修公司-安徽盛世和居装饰 | 数年网路-免费在线工具您的在线工具箱-shuyear.com | 无线对讲-无线对讲系统解决方案-重庆畅博通信 | 微型气象仪_气象传感器_防爆气象传感器-天合传感器大全 | BAUER减速机|ROSSI-MERSEN熔断器-APTECH调压阀-上海爱泽工业设备有限公司 | 萃取箱-萃取槽-PVC萃取箱厂家-混合澄清槽- 杭州南方化工设备 | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 培训无忧网-教育培训咨询招生第三方平台| elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | 农业四情_农业气象站_田间小型气象站_智慧农业气象站-山东风途物联网 | 清水混凝土修复_混凝土色差修复剂_混凝土色差调整剂_清水混凝土色差修复_河南天工 | 拉力机-拉力试验机-万能试验机-电子拉力机-拉伸试验机-剥离强度试验机-苏州皖仪实验仪器有限公司 | 南京展台搭建-南京展会设计-南京展览设计公司-南京展厅展示设计-南京汇雅展览工程有限公司 | 污水提升器,污水提升泵,污水提升装置-德国泽德(zehnder)水泵系统有限公司 | 经济师考试_2025中级经济师报名时间_报名入口_考试时间_华课网校经济师培训网站 | 防水套管厂家_刚性防水套管_柔性防水套管_不锈钢防水套管-郑州中泰管道 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛婚外情取证-青岛王军侦探事务所 | 河南中整光饰机械有限公司-抛光机,去毛刺抛光机,精密镜面抛光机,全自动抛光机械设备 | 船用泵,船用离心泵,船用喷射泵,泰州隆华船舶设备有限公司 | 在线浊度仪_悬浮物污泥浓度计_超声波泥位计_污泥界面仪_泥水界面仪-无锡蓝拓仪表科技有限公司 | 合肥白癜风医院_[治疗白癜风]哪家好_合肥北大白癜风医院 | ICP备案查询_APP备案查询_小程序备案查询 - 备案巴巴 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 艺术涂料|木纹漆施工|稻草漆厂家|马来漆|石桦奴|水泥漆|选加河南天工涂料 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 河南中整光饰机械有限公司-抛光机,去毛刺抛光机,精密镜面抛光机,全自动抛光机械设备 | 工业设计,人工智能,体验式3D展示的智能技术交流服务平台-纳金网 J.S.Bach 圣巴赫_高端背景音乐系统_官网 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 天坛家具官网 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 模具钢_高速钢_不锈钢-万利钢金属材料 | 楼梯定制_楼梯设计施工厂家_楼梯扶手安装制作-北京凌步楼梯 |