Rails-API项目中如何对Active Storage功能进行测试?
无需视图的请求方案(直接调用接口即可)
你之前的操作报错大概率是因为混用了JSON请求格式和文件上传逻辑:application/json类型的请求体无法承载二进制文件内容,必须用multipart/form-data格式才能同时传输结构化数据和文件。
方案1:Postman 配置请求
- 选中对应请求,请求方法匹配你Rails接口的设置(通常是POST/PUT)
- 进入「Body」标签页,选择
form-data类型 - 配置文件字段:key填写Rails接口约定的附件参数名(比如
avatar),hover到key输入框右侧的下拉菜单选择File类型,再在value列选择本地测试文件 - 配置JSON结构化数据:
- 如果结构简单(顶层或浅嵌套),直接按Rails参数约定拆分填写即可,比如要传
{"user": {"name": "test", "age": 18}},就分别添加key为user[name]、value为test,key为user[age]、value为18的键值对,Rails会自动解析为嵌套哈希 - 如果结构复杂不想拆分,可以新增一个key为
payload,value粘贴完整JSON字符串,之后在Rails控制器里手动解析即可:@data = JSON.parse(params[:payload])
- 如果结构简单(顶层或浅嵌套),直接按Rails参数约定拆分填写即可,比如要传
- 无需手动修改Headers里的
Content-Type,Postman会自动生成带边界标识的multipart/form-data请求头,手动填写反而容易导致解析失败
方案2:curl 命令行请求(无需打开Postman)
直接在终端执行命令即可,示例如下:
# 简单参数场景 curl -X POST http://你的Rails接口地址/路由 \ -F "avatar=@/本地文件的完整路径.png" \ -F "user[name]=测试账号" \ -F "user[age]=22"
复杂JSON结构场景:
curl -X POST http://你的Rails接口地址/路由 \ -F "avatar=@/本地文件的完整路径.png" \ -F "payload='{\"user\": {\"name\": \"测试账号\", \"tags\": [\"管理员\", \"VIP\"]}}';type=application/json"
Rails侧配置注意事项
只要在对应控制器的强参数里放行附件字段即可,比如User模型绑定了has_one_attached :avatar,强参数写法如下:
def user_params params.require(:user).permit(:name, :age, :avatar) end
内容的提问来源于stack exchange,提问作者N0ne
相关产品推荐
相关产品推荐

