const FormData = require('form-data'); const data = new FormData(); console.log('buffer: ', buffer); console.log('typeof buffer: ', typeof buffer); const filename = new Date().getTime().toString() + '.webm'; data.append('model', 'whisper-1'); data.append('file', bufferToStream(buffer)); console.log('data: ', data); let config = { method: "post", maxBodyLength: Infinity, url: "https://api.openai.com/v1/audio/transcriptions", headers: { Authorization: `Bearer ${process.env.OPENAI_API_KEY}`, "Content-Type": "multipart/form-data", ...data.getHeaders(), }, data: data, }; await axios.request(config)
我试图向OpenAI发送一个文件以获取转录,但总是收到400错误请求的错误。
我在使用JavaScript(不是TypeScript),所以我不能使用FormData包,至少我试过但没有帮助我。
我尝试使用Postman,它可以正常工作,并提供了以下代码片段:
const axios = require('axios');const FormData = require('form-data');const fs = require('fs');let data = new FormData();data.append('model', 'whisper-1');data.append('file', fs.createReadStream('/Users/UserName/Downloads/session-1708252969167.webm'));let config = { method: 'post', maxBodyLength: Infinity, url: 'https://api.openai.com/v1/audio/transcriptions', headers: { 'Authorization': {{OPENAI_API_KEY}}, 'Cookie': '__cf_bm=5L5OJyh1Yd28yUT9Uv0TT9F5POhL1fzeraSZF1C.9OA-1708337727-1.0-AV+XT0hftIn7mtJxICJduMQBpFcB9UQvbil6GmgI2BX7rw0BZRvuseeN0QgeuIt7KyNTxGJs/xcWIKMpkQdvzC4=; _cfuvid=3uLOzYX3DlLxSjGMLDqD0qcGIj.4zkEXt2czm9OiEfU-1708251423683-0.0-604800000', ...data.getHeaders() }, data : data};axios.request(config).then((response) => { console.log(JSON.stringify(response.data));}).catch((error) => { console.log(error);});
我同样尝试了这个代码片段,但它也抛出了400错误。
我做错了什么?
回答:
这个代码可以工作
保存为trans.js
const axios = require('axios');const fs = require('fs');const FormData = require('form-data');// 函数用于调用APIasync function callOpenAI() { try { const fileStream = fs.createReadStream('audio.webm'); const formData = new FormData(); formData.append('file', fileStream); formData.append('model', 'whisper-1'); const response = await axios.post('https://api.openai.com/v1/audio/transcriptions', formData, { headers: { 'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`, ...formData.getHeaders() // 手动获取头部信息 } }); console.log(response.data); } catch (error) { console.error('错误:', error.response.data); }}// 调用函数callOpenAI();
使用Postman检查API
设置API KEY的环境变量
在Git Bash中
OPENAI_API_KEY=[your API KEY]
安装依赖
npm install axios fs form-data
运行它
node trans.js