【问题标题】:ActionController::BadRequest (Invalid request parameters: invalid %-encodingActionController::BadRequest(无效的请求参数:无效的 %-encoding
【发布时间】:2017-03-26 20:45:03
【问题描述】:

我正在使用 Rails 5 API 开发一个 Ionic 2 应用程序。我正在尝试将文件从手机上传到服务器。我为此使用了 cordova FileTransfer 插件。来自FileTransferdocs

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

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

  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);
  }

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

  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 应该是multipart/form-data,并且当数据是 url 编码时应该会发生此错误。我的项目被困在这个问题上。我想知道,

  1. 如果没有进行 url 编码,是什么导致了这个错误?
  2. 我该如何调试呢?当我在本地机器上但在heroku上使用它时没有问题。

    编辑

file upload 中的chunkMode 选项打开时,我在开发中遇到了类似的错误。我将其设置为 false ,错误消失了。如果您想知道更多细节,我会添加它们。任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    终于找到问题了。它是科尔多瓦FileTransfer 插件1.6.0 中的一个错误。它通过 https 连接强制 chunkedMode 。更新到 1.6.2 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2019-07-19
      • 1970-01-01
      • 2017-04-02
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 2016-05-29
      相关资源
      最近更新 更多