【问题标题】:POSTing json data and file to Ruby on Rails API将 json 数据和文件发布到 Ruby on Rails API
【发布时间】:2021-05-05 05:52:53
【问题描述】:

我对 ruby​​ on rails 很陌生,所以我很可能遗漏了一些简单的东西,但我这辈子都想不通。

我已经使用 ruby​​ on rails 创建了一个 API 服务器,但我似乎无法将 JSON 与图片一起发布。我一直在服务器端收到错误,抱怨编码错误。

ActionController::BadRequest (Invalid request parameters: invalid %-encoding 
.rbenv/versions/3.0.1/lib/ruby/3.0.0/uri/common.rb:324:in decode_www_form_component'

我正在使用 Postman 发出请求。我正在使用 form-data 选项在我的 JSON 中包含一个文本条目,在我的 PNG 中包含一个文件条目。标头 Content-Type 是多部分/混合的。各个键/值对分别为application/jsonimage/png。我不知道这是邮递员问题还是红宝石控制器问题。或错误。

任何见解或进一步的问题都会对我有所帮助。

编辑: 这是我在邮递员内部发帖请求的代码。

curl --location --request POST 'http://localhost:3000/api/v1/events/1/eventphotos/' \
--header 'Content-Type: multipart/mixed' \
--form 'data={
    "eventphoto":{
        "event_id":1,
        "photopath":"nothing to see here"
    }
}' \
--form 'picture=@/Users/chancefinley/Downloads/mushroom.png'

【问题讨论】:

  • 在 Postman 中,您有一个代码选项(在发送按钮下方),您可以粘贴其中的内容吗?
  • @Joel_Blum 甚至都不知道它的存在。我已经编辑了问题并将其添加到上面
  • 我注意到在生成的 curl 代码中,邮递员不包括我提交的表单数据的子类型。也许这就是我的 Rails 应用程序绊倒的原因?
  • 在 PostMan 中以x-www-form-urlencoded 发送数据,错误就会消失。当您遇到相对于当前编码的无效字符时会发生这种情况。

标签: ruby-on-rails postman


【解决方案1】:

我不确定是否是这种情况,但您是否在项目中添加了活动存储? 因为如果不是,我认为将文件插入数据库时​​遇到问题, 您可以将图像转换为 base 64 编码并将其保存为字符串或按照本指南查看是否有帮助:https://levelup.gitconnected.com/rails-image-upload-101-f9bf245e389b

【讨论】:

  • 我考虑过。我目前正在使用 CarrierWave gem。
  • @Pants 但是问题出在你真正的 Rails 应用程序(carrierwave gem)还是 Postman 中?
  • @Joel_Blum 这就是我的困境。对任何一个都不太了解,无法知道哪个是正确的。
【解决方案2】:

问题最终是我需要一个包含表单的视图。你知道,这样formdata请求就有了实际提交的东西……愚蠢的错误。吸取教训

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 2018-04-18
    • 1970-01-01
    相关资源
    最近更新 更多