回答
在 Hamibot 中,上传文件需使用 http.postMultipart 方法。该方法原生支持 multipart/form-data 协议,可轻松实现单文件或批量文件上传。
1. 单独上传图片
使用 open() 读取本地文件路径,直接作为参数值传入:
// 文档地址 https://docs.hamibot.com/
var uploadUrl = 'https://your-api.com/upload';
var imagePath = '/storage/emulated/0/photo.png';
var res = http.postMultipart(uploadUrl, {
file: open(imagePath)
});
log('状态码: ' + res.statusCode);
log(res.body.string());
2. 同时上传图片和 JS 文件
在参数对象中定义多个键值对,每个键对应后端接收的字段名,值使用 open() 读取对应文件:
// 文档地址 https://docs.hamibot.com/
var uploadUrl = 'https://your-api.com/upload';
var imagePath = '/storage/emulated/0/photo.png';
var jsPath = '/storage/emulated/0/script.js';
var res = http.postMultipart(uploadUrl, {
image: open(imagePath),
script: open(jsPath),
// 可同时附带普通文本参数
remark: '自动化测试上传'
});
log('状态码: ' + res.statusCode);
log(res.body.string());
3. 文件参数格式说明
http.postMultipart 支持三种文件参数写法,可根据服务端要求灵活切换:
- 格式 1(默认):
open('文件绝对路径') - 格式 2(自定义文件名):
['服务器显示的文件名', '文件绝对路径'] - 格式 3(自定义文件名 + MIME类型):
['服务器显示的文件名', 'MIME类型', '文件绝对路径']
示例(使用格式 3 精确控制类型):
// 文档地址 https://docs.hamibot.com/
var res = http.postMultipart(uploadUrl, {
image: ['upload_photo.png', 'image/png', '/storage/emulated/0/photo.png'],
script: ['upload_script.js', 'application/javascript', '/storage/emulated/0/script.js']
});
最佳实践与注意事项
- 字段名对齐:参数对象的键名(如
image、script)必须与后端接口文档定义的字段名完全一致,否则服务端无法解析。 - 多文件同字段名:若后端要求多个文件使用同一个字段名(如
files[]),可传入数组:{ files: [open(path1), open(path2)] }。 - 权限与路径:Android 11 及以上系统对存储访问有限制,请确保文件位于 Hamibot 可访问的目录(如应用私有目录或已授权的公共媒体目录),并提前授予存储权限。
- 异常处理:建议通过
res.statusCode判断请求结果(200 表示成功),并结合try...catch捕获网络或文件读取异常,提升脚本稳定性。 - 引擎兼容:以上代码均使用标准 ES5 语法编写,未使用箭头函数或默认参数,完全兼容 Hamibot 内置的 Rhino 1.7.15 引擎。
按上述结构编写即可稳定完成图片与 JS 文件的上传。如遇服务端返回特定错误码,可提供具体响应内容以便进一步定位接口参数问题。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实