【问题标题】:Ajax upload of images to cloudinary rails 5 fails without errorAjax 将图像上传到 cloudinary rails 5 失败且没有错误
【发布时间】:2017-08-21 15:47:41
【问题描述】:

我在我的 Rails 应用程序(后端)上使用 carrierwavecloudinary,并在 update 上使用 PATCH 操作 covers_controller

  def update
    @book = Book.friendly.find(params[:slug])

    unless @book.nil?
      @cover = @book.cover
    end

    respond_to do |format|
      if @cover.update(cover_params)
        format.json { render json: @cover, message: 'Saved' }
      else
        format.json { render json: @cover.errors, status: :unprocessable_entity }
      end
    end
  end

这与$('form#addFrontImage').submit() 一起工作得很好,这导致了正常重新加载封面#show 页面到 :update 操作,因为图像已保存到 cloudinary。

然后我决定用 ajax 上传替换为 .submit() 方法,如下所示:

function uploadFrontImage (inputFile) {
  var validated = false

  validated = validateFiles(inputFile)

  if (validated !== true) return

  $('.loader').removeClass('hidden')

  var file = document.getElementById('cover_front_image').files[0]

  var reader = new FileReader()

  reader.readAsDataURL(file)

  reader.addEventListener('load', function () {
    document.querySelectorAll('#frontUploadPreview')[0].src = reader.result
  }, false)

  var form = $('#addFrontImage')
  var $file = $('#cover_front_image')

  var formData = new FormData()

  formData.append('cover[front_image]', $file[0].files[0])

  $.ajax({
    url: form.action,
    data: formData,
    cache: false,
    contentType: false,
    processData: false,
    type: 'PATCH',
    success: function(res) {
      console.log(res)

      var frontImage = new Image()
      frontImage.src = reader.result

      $('div.front span img').replaceWith(frontImage)

      $('.loader').addClass('hidden')
    },
    error: function(err) {
      console.error(err)
    }
  })
}

现在,当我第一次将图像上传到资源cover 的给定实例时,这段代码就可以工作了。但是当我重新上传另一个图像以覆盖之前的图像时,请求只是成功完成但没有保存图像。

这里发生了什么?我该如何解决?

【问题讨论】:

  • 您是第二次收到新的路径响应了吗?
  • 我可以使用update.js.erb 获取表单的新实例,但目前似乎存在不同的问题。即使在页面刷新后,它也不会将 new_image 上传到模型。

标签: ruby-on-rails ajax cloudinary


【解决方案1】:

我希望你像这样更改代码

$.ajax({
    url: form.action,
    data: formData,
    cache: false,
    contentType: false,
    processData: false,
    ***type: 'POST'***,

【讨论】:

  • ` 补丁 'cover/:slug', 到: 'covers#update', as: :update_cover `
  • 我建议你运行'rake routes'。所以你可能确定有'patch cover#update'
  • 是的,有:update_cover PATCH /cover/:slug(.:format) covers#update
猜你喜欢
  • 1970-01-01
  • 2014-11-25
  • 2019-09-21
  • 2018-01-28
  • 1970-01-01
  • 2021-03-20
  • 2015-02-21
  • 2017-07-12
  • 2021-04-12
相关资源
最近更新 更多