前言 先上波科大讯飞官方文档地址：https://www.xfyun.cn/doc/asr/voicedictation/API.html 需要提前准备好密钥信息APPID、APISecret、APIKey，怎么获取这三个配置我就省略了 这个案例使用的是webAPI 下载官方demo 这里我下载的是webAPI 语音听写流式API demo js语言，下载后得到以下文件 官方demo直接用原始html+js写的，我这里直接改成vue写法 需要把index.umd.js、processor.worker.js、processor.worklet.js放到项目/public/js/xf 安装依赖 npm i crypto-js 直接上代码吧，自行修改APPID、APISecret、APIKey就能直接用 完整代码 {{ btnTxt }} {{ result }}
前言 先上波官方文档地址：https://cloud.tencent.com/document/product/436/11459 需要提前准备好密钥信息SecretId、SecretKey、以及相应的配置信息； 相应的信息可以在这里找到：https://cloud.tencent.com/document/product/436/7751 以下demo包含javascript SDK和Node.js SDK两种实现方式，更多方案请移步官方文档查阅。 [scode type="yellow"]注意！部署到生产环境请务必使用临时密钥，不要使用固定密钥，避免泄露[/scode] js实现 1、安装依赖 npm i cos-js-sdk-v5 --save 2、引入 // 引入cos模块 import COS from 'cos-js-sdk-v5'; const config = { SecretId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', SecretKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', SecretKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', Bucket: '存储桶名称', Region: '存储桶地域名', }; // 实例化cos const cos = new COS({ SecretId: config.SecretId, SecretKey: config.SecretKey, }); 3、使用 这里使用的是element ui，el-upload上传方式默认是使用action直接调用接口上传的，由于该上传是是直接调用cos方法，所以action这里不需要填，写个空值，把自定义方法绑定到http-request上 data(){ return { fileList: [] } } methods:{ // 上传到腾讯云cos uploadToCos(file){ const fileInfo = file.file; const data = file.data; const that = this; cos.putObject({ Bucket: config.Bucket, Region: config.Region, Key: `/`, // 存储的路径 Body: fileInfo, // 上传对象 onProgress: progressData => { const percent = parseInt(progressData.percent * 10000) / 100; const speed = parseInt((progressData.speed / 1024 / 1024) * 100) / 100; console.log('进度：' + percent + '%; 速度：' + speed + 'Mb/s;'); }, }, (err, data) => { if(data && data.statusCode == 200) { console.log(data); console.log('上传完成！'); }else { console.log(err); console.log('上传失败！错误信息：' + err.message); } }); }, } 4、完整demo 上传到cos NodeJs实现 1、安装依赖 npm i cos-nodejs-sdk-v5 --save 2、引入使用 上传到cos 我这里Node使用的是egg框架，以下代码为egg规范，看着办哈，换汤不换药 'use strict'; const Controller = require('egg').Controller; const COS = require('cos-nodejs-sdk-v5'); const toArray = require('stream-to-array'); const config = { SecretId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', SecretKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', SecretKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', Bucket: '存储桶名称', Region: '存储桶地域名', }; const cos = new COS({ SecretId: config.SecretId, SecretKey: config.SecretKey, }); class UploadController extends Controller { async uploadToCos() { const stream = await this.ctx.getFileStream(); // 获取文件流 const parts = await toArray(stream); const buf = Buffer.concat(parts); const data = stream.fields; // 处理文件 const formData = { code: '', fileInfo: { fileName: stream.filename, fileSize: '', fileUrl: '', sha256: '', }, msg: '', }; return new Promise((resolve, reject) =>{ // 单片上传 cos.putObject({ Bucket: config.Bucket, /* Bucket,名称 必须 */ Region: config.Region, /* 所属地域 必须 */ Key: './', /*路径 必须 */ Body: buf, // 上传对象 }, function(err, data) { if (err) { reject(err); } else { resolve(data); } }); // 分片上传 // cos.sliceUploadFile({ // Bucket: config.Bucket, // Region: config.Region, // Key: `${config.path}/${appId}/${stream.filename}`, // FilePath: './', // Body: stream, // }, function(err, data) { // if (err) { // reject(err); // } else { // resolve(data); // } // }); }) } async upload() { const result = await this.uploadToCos(); this.ctx.body = result; // 返回的数据 } } module.exports = UploadController; 临时密钥实例化COS 临时密钥跟固定密钥的用法不同，临时密钥需在后端获取再实例化COS对象，实例化成功后才可以进行COS的操作 1、获取临时密钥并实例化COS // cos.js import COS from 'cos-js-sdk-v5'; // 通过后端获取临时密钥信息实例化COS export const cos = new COS({ getAuthorization: function (options, callback) { axios({ method: 'post', url: 'xxx.xxx', // 获取临时密钥信息的接口url }).then(result => { if (result && result.code === 0) { // cos配置 callback({ TmpSecretId: result.TmpSecretId, TmpSecretKey: result.TmpSecretKey, SecurityToken: result.SecurityToken, // StartTime: Date.parse(new Date()) / 1000, // ExpiredTime: Date.parse(new Date()) / 1000, }); } }); } } 2、调用cos方法