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,一切正常
我正在使用这个 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,一切正常