amr2mp3.js var http = require('http');var https = require("https"); //httpsvar crypto = require('crypto'); //加密var fs = require('fs'); //文件操作var express = require('express');var iconv = require("iconv-lite");var bodyParser = req
var http = require('http'); var https = require("https"); //https var crypto = require('crypto'); //加密 var fs = require('fs'); //文件操作 var express = require('express'); var iconv = require("iconv-lite"); var bodyParser = require("body-parser"); //post解析json var app = express(); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); /** * 微信语音转码并回发 **/ app.post('/download/media', function (request, response) { if (request.body.access_token && request.body.media) { downLoadMedia(request.body.access_token, request.body.media, function (data) { if (data.length < 100) { debug(data); response.end(data); } else { var fileName = sha1(getTime() + Math.random()); //var fileName = "./demo.amr"; fs.writeFileSync("./voice/" + fileName + ".amr", data, "binary"); var ffmpeg = require('fluent-ffmpeg'); var command = ffmpeg("./voice/" + fileName + ".amr") .save("./voice/" + fileName + ".mp3") .on('error', function (err) { debug("Convert Error!"); }) .on('end', function () { debug("Converted..."); response.end("https://node.hamm.cn/voice/?id=" + fileName); var url = "https://www.xxx.com/wechat/sendmsg/text?id=" + request.body.openid + "&msg=" + encodeURIComponent("https://node.hamm.cn/voice/?id=" + fileName); https.get(url, function (ress) { debug(ress.text); }).on('error', function (e) { debug(e.message); }); }); debug("Converting..."); } }); } else { var msg = "Params Missing!"; debug(msg); res.end(msg); } }); /** * **/ app.post('/download/url', function (req, res) { if (req.body.fileurl) { downLoadMediaWithUrl(req.body.fileurl, function (data) { if (data.length === 0) { var fileName = sha1(getTime() + Math.random()); //var fileName = "./demo.amr"; fs.writeFileSync("./voice/" + fileName + ".amr", data, "binary"); var ffmpeg = require('fluent-ffmpeg'); var command = ffmpeg("./voice/" + fileName + ".amr") .save("./voice/" + fileName + ".mp3") .on('error', function (err) { debug("Convert Error!"); }) .on('end', function () { debug("Converted..."); res.end("https://node.hamm.cn/voice/?id=" + fileName); }); debug("Converting..."); } }); } else { var msg = "Params Missing!"; debug(msg); res.end(msg); } }); app.get('/voice/', function (req, res) { var param = req.query.id; fs.readFile('./voice/' + param + ".mp3", function (err, data) { if (err) { debug("File not found!"); res.end("File not found!"); } else { debug("File Got!"); res.end(data); } }); }); app.get('/*', function (req, res) { var params = req.originalUrl; res.send(""); }); var server = app.listen(10001, function () { //var host = server.address().address //var port = server.address().port debug("Server running..."); }); function downLoadMediaWithUrl(url, callback) { https.get(url, function (res) { var datas = ""; res.setEncoding("binary"); //一定要设置response的编码为binary res.on('data', function (data) { datas += data; }); res.on("end", function () { //var buff = Buffer.concat(datas, size); //var result = iconv.decode(buff, "utf8"); //转码 //var result = buff.toString(); //不需要转编码,直接tostring callback(datas); }); }).on("error", function (err) { debug("Request Error!"); }); } function downLoadMedia(access_token, media, callback) { var url = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=" + access_token + "&media_id=" + media; https.get(url, function (res) { var datas = ""; res.setEncoding("binary"); //一定要设置response的编码为binary res.on('data', function (data) { datas += data; }); res.on("end", function () { //var buff = Buffer.concat(datas, size); //var result = iconv.decode(buff, "utf8"); //转码 //var result = buff.toString(); //不需要转编码,直接tostring callback(datas); }); }).on("error", function (err) { debug("Request Error!"); }); } function debug(msg) { console.log("Console\t" + getTime() + "\t" + msg); } function sha1(str) { var sha1 = crypto.createHash("sha1"); //定义加密方式:md5不可逆,此处的md5可以换成任意hash加密的方法名称; sha1.update(str); var res = sha1.digest("hex"); //加密后的值d return res; } function getTime() { var now = new Date(); var hours = now.getHours(); var minutes = now.getMinutes(); var seconds = now.getSeconds(); if (hours < 10) { hours = "0" + hours; } if (minutes < 10) { minutes = "0" + minutes; } if (seconds < 10) { seconds = "0" + seconds; } return hours + ":" + minutes + ":" + seconds; } 808 Not Found
Nginx&Node