微信录音文件上传到服务器以及amr转化成MP3格式
微信公众号音频接口开发
根据业务需求,我们可能需要将微信录音保存到服务器,而通过微信上传语音接口上传到微信服务器的语音文件的有效期只有3天,所以需要将文件下载到我们自己的服务器。
上传语音接口
wx.uploadVoice({
localId: '', // 需要上传的音频的本地ID,由stopRecord接口获得
isShowProgressTips: 1, // 默认为1,显示进度提示
success: function (res) {
var serverId = res.serverId; // 返回音频的服务器端ID
}
});
这里,在我们将录音文件上传之后,需要把这个sercerId传给后台然后通过get请求微信资源服务器获取录音文件
http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESSTOKEN&media_id=MEDIAID
这里需要传2个参数:1、access_token 2、media_id也就是上面的serverId
下面是我处理文件的方法:
public static InputStream getInputStream(String accessToken, String media_id) {
InputStream is = null;
String url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token="+accessToken+"&media_id="+media_id;
try {
URL urlGet = new URL(url);
HttpURLConnection http = (HttpURLConnection) urlGet
.openConnection();
http.setRequestMethod("GET"); // 必须是get方式请求
http.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true);
System.setProperty("sun.net.client.defaultConnectTimeout", "");// 连接超时30秒
System.setProperty("sun.net.client.defaultReadTimeout", ""); // 读取超时30秒
http.connect();
// 获取文件转化为byte流
is = http.getInputStream();
} catch (Exception e) {
e.printStackTrace();
}
return is;
}
public static String saveFile(String accessToken, String mediaId) throws Exception {
InputStream inputStream = getInputStream(accessToken, mediaId);
byte[] data = new byte[];
int len = ;
FileOutputStream fileOutputStream = null;
UUID audioName = UUID.randomUUID();
//filePath:服务器文件路径
//fileName:文件名,一般直接用UUID随机生成就行
String uploadFile = "filePath"+"fileName"+".amr";
//String mpsUploadFile = "filePath"+"fileName"+".mp3";
try {
fileOutputStream = new FileOutputStream(uploadFile);
while ((len = inputStream.read(data)) != -) {
fileOutputStream.write(data, , len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//change(uploadFile,mpsUploadFile);
//return mpsUploadFile;
return uploadFile;
}
上面代码就是将音频文件从微信服务器下载到自己服务器上的代码
一、window环境
由于amr的文件压缩格式比MP3的压缩空间更大,所以智能手机一般的音频格式都是amr的,而amr格式的音频文件在audio标签是不支持播放的,所以,我们想用audio标签播放音频就需要通过插件或者后台将amr格式文件转化成MP3,这里我就是通过文件格式转换来做的,下面是分享代码
这里需要下载并添加 jave-1.0.2.jar的jar包
//文件格式转化 amr-->mp3
public static void change(String amrUrl,String mp3Url)
{
File source = new File(amrUrl);
File target = new File(mp3Url);
AudioAttributes audio = new AudioAttributes();
Encoder encoder = new Encoder(); audio.setCodec("libmp3lame");
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("mp3");
attrs.setAudioAttributes(audio); try {
encoder.encode(source, target, attrs);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InputFormatException e) {
e.printStackTrace();
} catch (EncoderException e) {
e.printStackTrace();
}
}
在上面下载代码中有几行被注释掉的代码,就是关于amr转化MP3的引用,到时候直接将mpsUploadFile返回,就可以了,它就是MP3格式音频文件的路径,以上就是把通过微信录音接口生成的amr格式音频文件转化成audio标签们识别的MP3格式并上传到我们自己服务器的java实现代码。
附:由于我们使用的是阿里云服务器,所以我也将上传到阿里服务器的java实现代码贴出来,有需要的朋友,可以看一下:
public static String putObject(String uploadFileName) throws FileNotFoundException {
String accessKeyId = "**";
String accessKeySecret = "**";
String endPoint = "http://oss-cn-beijing.aliyuncs.com";
String bucketName = "**";
// 初始化OSSClient
OSSClient client = new OSSClient(endPoint, accessKeyId, accessKeySecret);
// 获取指定文件的输入流
File file = new File(uploadFileName);
InputStream content = new FileInputStream(file);
// 创建上传Object的Metadata
ObjectMetadata meta = new ObjectMetadata();
// 必须设置ContentLength
meta.setContentLength(file.length());
UUID fileName = UUID.randomUUID();
String okey = "**" + fileName + ".mp3";
// 上传Object.
PutObjectResult result = client.putObject(bucketName, okey, content, meta);
// 打印ETaghttp://chemahe.oss-cn-beijing.aliyuncs.com/viewpost/view0.jpg
//System.out.println(result.getETag());
return "http://chemahe.oss-cn-beijing.aliyuncs.com/" + okey + "";
}
对了,最后提一句,文件路径中的文件夹一定要提前创建,要不会报错!
二、linux环境
经测试 jave-1.0.2.jar只试用于window环境,linux上转换之后文件字节为0,经过查阅资料,找到了一个简单的能够在linux上进行转换的方法
下载ffmpeg文件,解压找到里面的ffmpeg这个文件

上传到linux上,然后使用Runtime执行linux命令,代码如下
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List; /**
* Created by SongZS on 2017/10/9.
*/
public class AmrToMp3Util {
public static void to(String amrFile,String mp3File){
List<String> commend = new ArrayList<String>();
//./ffmpeg -i test.amr test.mp3
commend.add("/home/audio/./ffmpeg");
commend.add("-i");
commend.add(amrFile);
commend.add(mp3File);
StringBuffer test=new StringBuffer();
for(int i=0;i<commend.size();i++)
test.append(commend.get(i)+" ");
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(test.toString());
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ( (line = br.readLine()) != null) ; } catch (Exception e) {
e.printStackTrace();
}
}
}
String amrFile amr文件在linux上路径,String mp3File转换成MP3文件在linux上的路径 上面只是简单的linux转换办法,如有更好方法,请留言指教,谢谢
微信录音文件上传到服务器以及amr转化成MP3格式的更多相关文章
- 微信录音文件上传到服务器以及amr转化成MP3格式,linux上转换简单方法
微信公众号音频接口开发 根据业务需求,我们可能需要将微信录音保存到服务器,而通过微信上传语音接口上传到微信服务器的语音文件的有效期只有3天,所以需要将文件下载到我们自己的服务器. 上传语音接口 wx. ...
- Java实现文件上传到服务器(FTP方式)
Java实现文件上传到服务器(FTP方式) 1,jar包:commons-net-3.3.jar 2,实现代码: //FTP传输到数据库服务器 private boolean uploadServer ...
- Linux 文件上传Linux服务器
进入命令行 在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell所提供的文本命令行界面(command line interface,CLI).CLI只能接受文本输入,也只能显示 ...
- 基于paramiko将文件上传到服务器上
通过安装使用paramiko模块,将本地文件上传到服务器上 import paramiko import datetime import os hostname = '服务器ip' username ...
- ubuntu中将本地文件上传到服务器
(1)在本地的终端下,而不是在服务器上.在本地的终端上才能将本地的文件拷入服务器. (2) scp -r localfile.txt username@192.168.0.1:/home/userna ...
- 一、手把手教你docker搭建fastDFS文件上传下载服务器
在搭建fastDFS文件上传下载服务器之前,你需要准备的有一个可连接的linux服务器,并且该linux服务器上已经安装了docker,若还有没安装docker的,先百度自行安装docker. 1.执 ...
- java文件上传到服务器
最近项目中使用到了文件从本地到服务器的功能.其实是为了解决目前浏览器不支持获取本地文件全路径.不得已而想到上传到服务器的固定目录,从而方便项目获取文件,进而使程序支持EXCEL批量导入数据. 在前台界 ...
- Linux 将本地文件上传Linux服务器, 即ssh 命令上传本地文件
利用ssh传输文件 在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件 scp username@servername:/path/filename /var/www ...
- Linux 将本地文件上传Linux服务器, 即ssh 命令上传本地文件
http://blog.csdn.net/rodulf/article/details/71169996 利用ssh传输文件 在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下 ...
随机推荐
- year:2017 month:7 day:18
2017-07-18 JavaScript 1javascript的控制语句 (1) if语句 (2)if(){}else 语句 (3) if(){} else if(){ }语句 (4)switch ...
- [NOIP 2011]聪明的质监员
聪明的质监员 题目 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n个矿石,从 1 到n逐一编号,每个矿石都有自己的重量wi以及价值vi.检验矿产的流程是: 1. 给定 m个区间[ ...
- C#和NewSQL更配 —— CockroachDB入门(可能是C#下的全网首发)
阅读目录 CockroachDB是什么 环境部署 实战 性能测试 结语 一.CockroachDB是什么 CockroachDB(https://www.cockroachlabs.com)是Goog ...
- Java中synchronized和Lock的区别
synchronized和Lock的区别synchronize锁对象可以是任意对象,由于监视器方法必须要拥有锁对象那么任意对象都可以调用的方法所以将其抽取到Object类中去定义监视器方法这样锁对象和 ...
- React Native 系列(二) -- React入门知识
前言 本系列是基于React Native版本号0.44.3写的,最初学习React Native的时候,完全没有接触过React和JS,本文的目的是为了给那些JS和React小白提供一个快速入门,让 ...
- 让这三个月来的更猛烈些吧,前端react同构项目
昨天一篇文章讲述了我在这三个月中由.net到java的过程,其中踩坑填坑的细节真不是三言两语可以道尽,而完成时的喜悦也远非寻常可比(仅次于涨工资).然而到这并不算完结,作为前后端分离的忠实粉丝,我认为 ...
- HPU--1141 蜗牛爬树
1141: 蜗牛爬树 [模拟] 时间限制: 1 Sec 内存限制: 128 MB提交: 377 解决: 60 统计 题目描述 阿门阿前一棵葡萄树,阿嫩阿嫩绿地刚发芽,蜗牛背著那重重的壳呀,一步一步地往 ...
- AngularJS--购物车全选/取消全选功能实现
刚学习angularJS,于是练习写了一个类似于购物车的全选/取消全选的功能,主要实现的功能有: 1.勾选全选checkbox,列表数据全部被勾选,取消同理,用ng-model实现双向绑定: 2.选中 ...
- macOS Sierra 10.12.6 安装u盘制作
一.准备工作: 准备一个 8GB 或以上容量的 U 盘,确保里面的数据已经妥善备份好(该过程会抹掉 U 盘全部数据) 从这里下载苹果官方 OS X Yosemite 正式版的安装程序 (可选 AppS ...
- k近邻法(KNN)知识点概括
分类一般分为两种: 积极学习法:先根据训练集构造模型,然后根据模型对测试集分类 消极学习法:推迟建模,先简单存储训练集,等到给定测试集时再进行建模,如KNN算法. 1. 简述 KNN的核心思想就是:物 ...