如何在API调用中发送Base64编码的图片文件内容字符串?
问题根因分析
你之前的三种尝试均不符合接口参数要求,对应错误原因如下:
- 文档示例里的URL仅为参数值格式示意,该接口实际要求
file字段传入文件的Base64编码字符串,而非公网可访问的文件链接,传入链接会被接口判定为非法文件内容,触发类型不支持报错。 - 直接生成的Base64字符串如果放在请求URL的查询参数中传递,会超出HTTP客户端的URI长度限制,触发过长报错,Base64内容必须放在POST请求的JSON请求体中。
- 你写的Node.js代码存在两个核心错误:一是请求头声明为
application/json但实际传入formData格式的请求体,格式不匹配导致接口无法解析参数;二是直接传递文件流而非Base64编码后的字符串,不符合参数要求。
正确操作步骤
Postman操作方法
- 第一步:将需要上传的文件转换为Base64编码,注意要完全去掉Base64前缀(比如
data:image/png;base64,这段内容),只保留后面的纯编码内容。 - 第二步:打开Postman新建POST请求,填入接口地址
https://api2.questblue.com/fax/send。 - 第三步:配置请求头:
- 新增
Content-type,值为application/json - 新增
Security-Key,值为你的接口私钥 - 新增
Authorization,认证类型选Basic Auth,填入你的API用户名和密码,Postman会自动生成符合要求的认证头
- 新增
- 第四步:切换到Body选项卡,选择
raw格式,数据类型选JSON,填入如下结构的请求体:
{ "did_from": 3332224444, "did_to": 1112223333, "file": "你生成的无前缀的Base64字符串" }
- 第五步:点击发送即可完成请求。
Node.js 正确代码示例
var fs = require('fs'); var request = require('request'); // 读取本地文件并直接转换为无前缀的Base64编码 var fileBase64 = fs.readFileSync('C:/Users/zee/folder/testfax.jpg', {encoding: 'base64'}); var options = { 'method': 'POST', 'url': 'https://api2.questblue.com/fax/send', 'headers': { 'Content-type': 'application/json', 'Security-Key': '你的接口私钥', // 生成Basic认证头,替换为你自己的API用户名和密码 'Authorization': 'Basic ' + Buffer.from('api_username:api_password').toString('base64') }, // 按要求传入JSON格式请求体 body: JSON.stringify({ "did_from": 3332224444, "did_to": 1112223333, "file": fileBase64 }) }; request(options, function (error, response) { if (error) throw new Error(error); console.log(response.body); });
注意事项
- 接口限制最大上传文件大小为5Mb,Base64编码后大小会比原文件大1/3左右,建议原文件大小控制在3.7Mb以内,避免编码后超出大小限制。
- 所有支持的文件格式转换逻辑完全一致,不需要针对格式调整Base64的处理方式,仅需确保去掉编码前缀即可。
- 若仍出现文件类型不支持报错,可检查原文件后缀是否在接口支持的格式列表内,排除文件扩展名伪造的情况。
内容的提问来源于stack exchange,提问作者Zee
相关产品推荐
相关产品推荐

