s3直接上传方式错误

s3 direct upload method error

我正在使用这个 gem 将文件直接上传到 S3

gem 's3_direct_upload'

https://github.com/waynehoover/s3_direct_upload

_form.html.erb

<%= s3_uploader_form callback_url: polymorphic_url([@academy, :dashboard,  @course, @lesson], {only_path: false}),callback_method: "PATCH", callback_param: "lesson[media]", id: "s3-uploader" do %>
    <%= file_field_tag :file, multiple: true %>
  <% end %>

  <script id="template-upload" type="text/x-tmpl">
  <div id="file-{%=o.unique_id%}" class="upload">
    {%=o.name%}
    <div class="progress"><div class="bar" style="width: 0%"></div></div>
  </div>
  </script>

文件加载成功

但是,进度条完成后,我在控制台日志中看到这个错误:

PATCH http://localhost:3000/academies/1/dashboard/courses/1/lessons/3/edit 404 (Not Found)

控制器

class Dashboard::LessonsController < ApplicationController
  before_action :set_lesson, only: [:show, :edit, :update, :destroy, :comment]
  before_filter :authenticate_user!

    # PATCH/PUT /lessons/1
  # PATCH/PUT /lessons/1.json
  def update
    respond_to do |format|
      if @lesson.update(lesson_params)
        format.html { redirect_to [:edit, @academy,  :dashboard, @course, @lesson], notice: 'Lesson was successfully updated.' }
        format.json { render :show, status: :ok, location: @lesson }
      else
        format.html { render :edit }
        format.json { render json: @lesson.errors, status: :unprocessable_entity }
      end
    end
  end

end

看起来更新后,您重定向到 :edit 操作,带有 PATCH 请求,如果我是对的,您的 :edit 操作可能只接受 GET 请求.

我不知道你的routes.rb里的#edit是怎么设置的,不过你可以试试修改你的_form.html.erb文件的第一行,把callback_method: "PATCH"callback_method: "GET"

这是 404,因此它试图命中配置了 callback_url 选项的 URL,但未找到它。

当您在该控制器中没有编辑操作时,您的回调 URL 配置(显然)为 /academies/1/dashboard/courses/1/lessons/3/edit

您需要将 callback_url 更改为指向(如评论所述).../lessons/3,而不是 .../lessons/3/edit/

Carrierwave 有问题。我不得不禁用 Carrierwave,一切正常