vue+node 는 Txt 파일 을 통 해 MP3 를 대량으로 생 성하 고 Zip 으로 압축 하 는 방법
압축 해제 파일
업로드 한 파일 형식
테스트 1|||테스트 1 의 텍스트
테스트 2|||테스트 2 의 텍스트
테스트 3|||테스트 3 의 텍스트
테스트 4|||테스트 4 의 텍스트
테스트 5|||테스트 5 의 문자
실현 의 논 리 는 다음 과 같다.
<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 내용 에 대해 서 는 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.