<template>
<div>
<input type="file" id="fileInput" />
<button @click="uploadFile()">Upload File</button>
</div>
</template>
<script setup>
import axios from 'axios'
import CryptoJS from 'crypto-js'
// 腾讯录音文件识别极速版 API
// https://cloud.tencent.com/document/product/1093/52097#3.5-.E7.AD.BE.E5.90.8D.E7.94.9F.E6.88.90.E8.AF.B4.E6.98.8E.3Ca-id.3D.22sign.22.3E.3C.2Fa.3E
function uploadFile() {
const Appid = '1313203058'
const SecretId = 'AKID60e2B3ez3btufAOL1QYP0KOAn9F4cuvg'
const SecretKey = 'WmlTt4ybx2qNeeNp0uYv1pMdcKlwquiF'
const params = {
// convert_num_mode: '1',
engine_type: '16k_zh',
// filter_dirty: '0',
// filter_modal: '0',
// filter_punc: '0',
// first_channel_only: '1',
// hotword_id: '',
SecretId,
// SecretKey,
// speaker_diarization: '0',
timestamp: Math.round(new Date() / 1000),
voice_format: 'wav'
// word_info: '0'
}
// 对参数按字典序进行排序并拼接成签名原文
const sortedParams = Object.keys(params)
.sort()
.map((key) => `${key}=${params[key]}`)
.join('&')
const requestUrl = `asr.cloud.tencent.com/asr/flash/v1/${Appid}`
const signString = `POST${requestUrl}?${sortedParams}`
// 使用 HmacSHA1 进行加密并进行 Base64 编码
const hash = CryptoJS.HmacSHA1(signString, SecretKey)
const signature = CryptoJS.enc.Base64.stringify(hash)
console.log('签名原文:', signString)
console.log('签名值:', signature)
const fileInput = document.getElementById('fileInput')
const file = fileInput.files[0]
const url = `https://asr.cloud.tencent.com/asr/flash/v1/${Appid}`
const formData = new FormData()
formData.append('data', file)
const headers = {
Host: 'asr.cloud.tencent.com',
Authorization: signature,
// 'Content-Type': 'multipart/form-data'
'Content-Type': 'application/octet-stream'
}
const reader = new FileReader()
reader.onload = (event) => {
const arrayBuffer = event.target.result
axios
.post(url, arrayBuffer, {
headers,
params
})
.then((response) => {
console.log('成功:', response.data)
})
.catch((error) => {
console.error('失败:', error)
})
}
reader.readAsArrayBuffer(file)
}
</script>