vue+node 는 Txt 파일 을 통 해 MP3 를 대량으로 생 성하 고 Zip 으로 압축 하 는 방법

효과 봐 봐.

압축 해제 파일

업로드 한 파일 형식
테스트 1|||테스트 1 의 텍스트
테스트 2|||테스트 2 의 텍스트
테스트 3|||테스트 3 의 텍스트
테스트 4|||테스트 4 의 텍스트
테스트 5|||테스트 5 의 문자
실현 의 논 리 는 다음 과 같다.
  • 파일 업로드
  • 분석 txt
  • 바 이 두 음성 합성 으로 내용 보 내기
  • 폴 더 를 생 성하 여 이번 합 성 된 mp3 파일 을 놓 고 zip
  • 로 압축 합 니 다.
  • zip 주 소 를 전단 으로 보 내기
  • element-ui 의 el-uproad 구성 요 소 를 사 용 했 습 니 다.
    
    <el-upload
      v-loading="loading"
      class="upload-demo"
      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 class="el-upload__tip" 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; //      sdk
    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("
    "); 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 내용 에 대해 서 는 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기