这篇文章主要介绍了微信语音上传 下载功能实例代码,需要的朋友可以参考下

假如现在有一个按钮

按住 说话

下面就是调用微信jssdk的方法var recorder;

var btnRecord = $('#record');

var startTime = 0;

var recordTimer = 300;

// 发语音

$.ajax({

url: 'url请求需要微信的一些东西 下面success就是返回的东西',

type: 'get',

data: { url: url },

success: function (data) {

var json = $.parseJSON(data);

//alert(json);

//假设已引入微信jssdk。【支持使用 AMD/CMD 标准模块加载方法加载】

wx.config({

debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

appId: json.appid, // 必填,公众号的唯一标识

timestamp: json.timestamp, // 必填,生成签名的时间戳

nonceStr: json.nonceStr, // 必填,生成签名的随机串

signature: json.signature, // 必填,签名,见附录1

jsApiList: [

"startRecord",

"stopRecord",

"onVoiceRecordEnd",

"playVoice",

"pauseVoice",

"stopVoice",

"onVoicePlayEnd",

"uploadVoice",

"downloadVoice",

] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2

});

wx.ready(function () {

btnRecord.on('touchstart', function (event) {

event.preventDefault();

startTime = new Date().getTime();

// 延时后录音,避免误操作

recordTimer = setTimeout(function () {

wx.startRecord({

success: function () {

localStorage.rainAllowRecord = 'true';

//style="display:block"

$(".voice_icon").css("display", "block");

},

cancel: function () {

layer.open({

content: '用户拒绝了录音授权',

btn: '确定',

shadeClose: false,

});

}

});

}, 300);

}).on('touchend', function (event) {

event.preventDefault();

// 间隔太短

if (new Date().getTime() - startTime < 300) {

startTime = 0;

// 不录音

clearTimeout(recordTimer);

} else { // 松手结束录音

wx.stopRecord({

success: function (res) {

$(".voice_icon").css("display", "none");

voice.localId = res.localId;

// 上传到服务器

uploadVoice();

},

fail: function (res) {

//alert(JSON.stringify(res));

layer.open({

content: JSON.stringify(res),

btn: '确定',

shadeClose: false,

});

}

});

}

});

});

},

error: function () { }

})

上传语音的方法function uploadVoice() {

//调用微信的上传录音接口把本地录音先上传到微信的服务器

//不过,微信只保留3天,而我们需要长期保存,我们需要把资源从微信服务器下载到自己的服务器

wx.uploadVoice({

localId: voice.localId, // 需要上传的音频的本地ID,由stopRecord接口获得

isShowProgressTips: 1, // 默认为1,显示进度提示

success: function (res) {

// alert(JSON.stringify(res));

//把录音在微信服务器上的id(res.serverId)发送到自己的服务器供下载。

voice.serverId = res.serverId;

$.ajax({

url: '/QyhSpeech/DownLoadVoice',

type: 'post',

data: { serverId: res.serverId, Id: Id },

dataType: "json",

success: function (data) {

if (data.Result == true && data.ResultCode == 1) {

layer.open({

content: "录音上传完成!",//data.Message

btn: '确定',

shadeClose: false,

yes: function (index) {

window.location.href = window.location.href;

}

});

}

else {

layer.open({

content: data.Message,

btn: '确定',

shadeClose: false,

});

}

},

error: function (xhr, errorType, error) {

layer.open({

content: error,

btn: '确定',

shadeClose: false,

});

}

});

}

});

}

后台调用的方法 需要一个ffmpeg.exe自行下载//下载语音并且转换的方法

private string GetVoicePath(string voiceId, string access_token)

{

string voice = "";

try

{

Log.Debug("access_token:", access_token);

//调用downloadmedia方法获得downfile对象

DownloadFile downFile = WeiXin.DownloadMedia(voiceId, access_token);

if (downFile.Stream != null)

{

string fileName = Guid.NewGuid().ToString();

//生成amr文件

string amrPath = Server.MapPath("~/upload/audior/");

if (!Directory.Exists(amrPath))

{

Directory.CreateDirectory(amrPath);

}

string amrFilename = amrPath + fileName + ".amr";

//var ss = GetAMRFileDuration(amrFilename);

//Log.Debug("ss", ss.ToString());

using (FileStream fs = new FileStream(amrFilename, FileMode.Create))

{

byte[] datas = new byte[downFile.Stream.Length];

downFile.Stream.Read(datas, 0, datas.Length);

fs.Write(datas, 0, datas.Length);

}

//转换为mp3文件

string mp3Path = Server.MapPath("~/upload/audio/");

if (!Directory.Exists(mp3Path))

{

Directory.CreateDirectory(mp3Path);

}

string mp3Filename = mp3Path + fileName + ".mp3";

AudioHelper.ConvertToMp3(Server.MapPath("~/ffmpeg/"), amrFilename, mp3Filename);

voice = fileName;

Log.Debug("voice:", voice);

}

}

catch { }

return voice;

}

调用GetVoicePath//下载微信语音文件

public JsonResult DownLoadVoice()

{

var file = "";

try

{

var serverId = Request["serverId"];//文件的serverId

file = GetVoicePath(serverId, CacheHelper.GetAccessToken());

return Json(new ResultJson { Message = file, Result = true, ResultCode = 1 });

}

catch (Exception ex)

{

return Json(new ResultJson { Message = ex.Message, Result = false, ResultCode = 0 });

}

}

AudioHelper类using System;

using System.Collections.Generic;

using System.Diagnostics;

using System.Linq;

using System.Text;

using System.Text.RegularExpressions;

using System.Threading;

namespace EYO.Common

{

///

/// 声音帮助类

///

public sealed class AudioHelper

{

private const string FfmpegUsername = "ffmpeg";

private const string FfmpegPassword = "it4pl803";

///

/// 音频转换

///

/// ffmpeg文件目录

/// 源文件

/// 目标文件

///

public static string ConvertToMp3(string ffmpegPath, string soruceFilename, string targetFileName)

{

//string cmd = ffmpegPath + @"\ffmpeg.exe -i " + soruceFilename + " " + targetFileName;

string cmd = ffmpegPath + @"\ffmpeg.exe -i " + soruceFilename + " -ar 44100 -ab 128k " + targetFileName;

return ConvertWithCmd(cmd);

}

private static string ConvertWithCmd(string cmd)

{

try

{

System.Diagnostics.Process process = new System.Diagnostics.Process();

process.StartInfo.FileName = "cmd.exe";

process.StartInfo.UseShellExecute = false;

process.StartInfo.CreateNoWindow = true;

process.StartInfo.RedirectStandardInput = true;

process.StartInfo.RedirectStandardOutput = true;

process.StartInfo.RedirectStandardError = true;

process.Start();

process.StandardInput.WriteLine(cmd);

process.StandardInput.AutoFlush = true;

Thread.Sleep(1000);

process.StandardInput.WriteLine("exit");

process.WaitForExit();

string outStr = process.StandardOutput.ReadToEnd();

process.Close();

return outStr;

}

catch (Exception ex)

{

return "error" + ex.Message;

}

}

}

}

文中标记红色的需要以下一个类库 放在文中最后链接里面 到时候直接放到项目里面即可(我也是找到)

php 微信 语音,微信语音的上传与下载功能实现详解相关推荐

  1. linux上连接ftp服务器,linux下lftp连接ftp服务器进行上传与下载的方法详解

    摘要 腾兴网为您分享:linux下lftp连接ftp服务器进行上传与下载的方法详解,中英翻译,中建在线,掌上看家,银行帮等软件知识,以及微信一键转发工具,小学英语冀教版,正是在下表情包,易问电信,万能 ...

  2. Linux 中 3 个文件打包上传和下载相关命令详解

    tar 命令 通过 SSH 访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar 命令就是必不可少的一个功能强大的工具.Linux 中最流行的tar是麻雀虽小,五脏俱全,功能强大. 使用t ...

  3. php微信小程序多图上传,tp5实现微信小程序多图片上传到服务器功能

    最近在做一个教育类的小商城的微信小程序,用到了上传多个图片文件到服务器端,这里做一个讲解,希望对大家有所帮助. 1,小程序端: 在wxml文件中: 删除 点击上传作业 在js文件中: Page({ / ...

  4. 【Python学习 】Python实现的FTP上传和下载功能

    一.背景 最近公司的一些自动化操作需要使用Python来实现FTP的上传和下载功能.因此参考网上的例子,撸了一段代码来实现了该功能,下面做个记录. 二.ftplib介绍 Python中默认安装的ftp ...

  5. python sftp_Python使用sftp实现上传和下载功能(实例代码)

    在Python中可以使用paramiko模块中的sftp登陆远程主机,实现上传和下载功能. 1.功能实现 根据输入参数判断是文件还是目录,进行上传和下载 本地参数local需要与远程参数remote类 ...

  6. 代理连接FTP实现上传和下载功能

    近日要实现FTP自动上传下载功能,但在办公区域受网络限制导致失败,最终研究通过办公区域的代理完成连接,并实现FTP上传和下载功能,同时将已上传和已下载的文件移动到默认的备份目录,保证定时任务不会重复获 ...

  7. XMLHttpRequest 对象实现文件上传和下载功能

    XMLHttpRequest 对象实现文件上传和下载功能(内含源码哦

  8. java文件流 m.jb51.net_FasfDFS整合Java实现文件上传下载功能实例详解

    今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 org.c ...

  9. python代码图片头像_Flask 上传自定义头像的实例详解

    Flask Web 开发这本书基本上做完了,后面还需要温习,但是自己做的博客总觉得简陋了点,所以,在动脑子开发新功能 今天想到最基本的功能,自定义头像 那这样的功能,设计到2大基本功能块 1:如何进行 ...

最新文章

  1. golang:1.并发编程之互斥锁、读写锁详解
  2. 深度学习如炼丹,你有哪些迷信做法?网友:Random seed=42结果好
  3. 深圳启动全国首届人工智能大赛!536万奖金!这座城市对人才的投入从不吝啬...
  4. Python可视化神器Yellowbrick使用
  5. 数据蒋堂 | 从一道招聘考题谈起
  6. 关于Messenger实现进程间通信
  7. Android 做项目总结
  8. 阿里云宣布 Serverless 容器服务 弹性容器实例 ECI 正式商业化
  9. 与ai计算机专业大学排名,全球大学计算机科学与人工智能排名:卡耐基梅隆大学居首...
  10. MVC3学习 六 HtmlHelper的使用与扩展
  11. linux和windows的进程的虚拟地址空间
  12. wepy小程序踩坑-未发现相关 sass/less 编译器配置,请检查wepy.config.js文件
  13. python画roc曲线需要什么数据,Python ROC曲线绘制
  14. python开源商城_Python 开源网上商城项目
  15. 斯科特.H.杨:MIT 课程挑战者 __转
  16. php7 开发框架,Lin是一套基于php7.2的全新web框架
  17. Windows 下 Quartus 检测不到 USB-Blaster 终极解决办法
  18. 学习OpenCV:海森矩阵(Hessian Matrix)
  19. MOSFET原理学习
  20. 042期正版四字梅花诗:冰清一洁

热门文章

  1. Google Chrome插件开发-Context Menus
  2. 想成为魅力十足的人的十大习惯
  3. 计算机access分数比例,[access查询]关于分数段统计问题
  4. maya导入模型后贴图没渲染怎么办?
  5. 拼多多免费版 自动回复 关键词回复 提高3分钟回复率
  6. 完美解决Win10 X64非原装版系统打不开CHM文件
  7. unity复现中的错误
  8. UG NX二次开发(C#)-装配-删除阵列矩阵
  9. day3-转自金角大王
  10. 亲影:您的相册需要一个专属管家