ActionController :: BadRequest(无效的请求参数:无效的%-encoding

时间:2017-03-26 10:59:09

标签: ruby-on-rails cordova heroku ionic-framework

我正在使用Ionic 2的{​​{1}}应用。我正在尝试将文件从手机上传到服务器。我为此用户使用了cordova Rails 5 API插件。来自FileTransfer docs

  

FileTransfer对象提供了一种使用HTTP上传文件的方法   多部分POST或PUT请求,以及下载文件。

这是我上传图片的离子代码,

FileTransfer

它获取文件路径并将其上传到我的rails后端。我有铁轨,

  fileUpload(filePath: string,apiEndpoint: string){
    this.fileTransfer = new Transfer();
    let fileName = filePath.substr(filePath.lastIndexOf('/') + 1);
    let options = Object.assign( this.httpHeader(),{chunkedMode: false, fileName: fileName});
    return this.fileTransfer.upload(filePath, apiEndpoint, options)
    .then((data) => {
      return data;
    }).catch(this.handleError);
  }

在我的本地机器的开发和生产环境中,一切正常。但是一旦我将它推到 def update_picture @user = current_user.update_picture(params[:file]) if @user.save render_create_success else render_create_errorn end end ,它就会抛出一个错误。

heroku

如果我是正确的,Started POST "/v1/update_picture" for ActionController::BadRequest (Invalid request parameters: invalid %-encoding ("file"; filename="tmp_IMG-20170321-WA0000972448512.jpg" Content-Type: image/jpeg ����JFIF��C vendor/bundle/ruby/2.3.0/gems/rack-2.0.1/lib/rack/query_parser.rb:72:in `rescue in parse_nested_query' 应为Content-Type,并且在数据进行网址编码时会出现此错误。我的项目坚持这个问题。我想知道,

  1. 如果不是网址编码会导致此错误的原因是什么?
  2. 我该如何调试?我在本地机器上使用它时没有问题,但是在heroku上。

    修改

  3. multipart/form-data中的chunkMode选项开启时,我在开发过程中遇到了类似的错误。我将其设置为false,错误消失了。如果您想了解更多细节,我会添加它们。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

终于找到了问题。它是cordova FileTransfer插件1.6.0中的一个错误。它通过https连接强制chunkedMode。更新到1.6.2修复了问题。