使用carrierwave gem rails4安全上传/下载文件

身份验证用户可以下载和上传文件,这是我的项目的主要目的。我想保护我的文件下载,以便只有身份验证用户才能下载文件。为此,我使用了gem carrierwavecarrierwave / wiki和“ How to:Secure Upload”但是,当我单击下载URL时,其显示为“ HTTP / 1.1 500 Internal Server Error”

这是addfiles_controller.rb文件:

class AddfilesController < ApplicationController
  before_action :logged_in

  def index
    @addfiles = Addfile.all
  end

  def new
    @addfile = Addfile.new
  end

  def create
    if admin_signed_in?
      @addfile = current_admin.addfiles.build(addfile_params)
    else
      @addfile = current_user.addfiles.build(addfile_params)
    end


    if @addfile.save
      redirect_to addfiles_path
    else
      render "new"
    end
  end

  def destroy
    @addfile = Addfile.find(params[:id])
    @addfile.destroy
    redirect_to addfiles_path
  end


  def download
    path = "/#{addfile.addfile}"
    send_file path, :x_sendfile=>true
  end



  private
  def addfile_params
    params.require(:addfile).permit(:name, :attachment)
  end
end

config / initializers / carrierwave.rb文件:

CarrierWave.configure do |config|
  # These permissions will make dir and files available only to the user running
  # the servers
  config.permissions = 0600
  config.directory_permissions = 0700
  config.storage = :file
  # This avoids uploaded files from saving to public/ and so
  # they will not be available for public (non-authenticated) downloading
  config.root = Rails.root
end

route.rb文件:

FileDownload::Application.routes.draw do

  match "/uploads/:id/:basename.:extension", :controller => "addfiles", :action => "download", via: :get

  resources :addfiles do
    collection  do
      get 'all_users'
    end
  end
  root "addfiles#index"
  devise_for :admins
  devise_for :users

end

在我看来:

<%= link_to File.basename(file.attachment_url), "/uploads/#{file.id}/#{File.basename(file.attachment_url)}" %>

attachment_uploader.rb文件

class AttachmentUploader < CarrierWave::Uploader::Base

  storage :file

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  def extension_white_list
    %w(pdf doc htm html docx)
  end

end

错误跟踪::

Started GET "/uploads/13/ARTICLE_FINAL_.pdf" for 127.0.0.1 at 2014-09-04 14:39:53 +0600
Processing by AddfilesController#download as */*
  Parameters: {"id"=>"13", "basename"=>"ARTICLE_FINAL_", "extension"=>"pdf"}
  ←[1m←[36mUser Load (0.0ms)←[0m  ←[1mSELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1←[0m
Completed 500 Internal Server Error in 4ms

NameError (undefined local variable or method `addfile' for #<AddfilesController:0x46baa10>):
  app/controllers/addfiles_controller.rb:37:in `download'


  Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-4.0.4/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.0ms)
  Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-4.0.4/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.0ms)
  Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-4.0.4/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
  Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-4.0.4/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (47.0ms)
[2014-09-04 14:39:53] ERROR Errno::ECONNRESET: An existing connection was forcibly closed by the remote host.
        C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:80:in `eof?'
        C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:80:in `run'
        C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'

这是什么问题?请给我您的建议。

阿努沙

尝试更改下载方法,如下所示:

addfiles_controller.rb:

def download
      send_file '#{Rails.root}/uploads/addfile/#{file.id}'
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Selenium Webdriver使用相对路径上传下载文件

来自分类Dev

Selenium Webdriver使用相对路径上传下载文件

来自分类Dev

使用WCF Rest进行文件上传下载

来自分类Dev

在 Rails 应用程序中使用 mini_magick 处理带有 CarrierWave gem 的图像的问题

来自分类Dev

如何下载使用carrierwave上传的特定文件?

来自分类Dev

从 S3 检索文件。- Carrierwave Rails Gem

来自分类Dev

是否可以优化由Carrierwave gem上传的图像?

来自分类Dev

Carrierwave gem Secure File Path无法读取文件错误

来自分类常见问题

Rails 4使用carrierwave上传多个图像或文件

来自分类Dev

SFTP上传下载使用Apache Commons VFS存在并移动

来自分类Dev

Carrierwave直接gem安装报错

来自分类Dev

RoR - 使用 gmail gem 下载 ZIP 文件

来自分类Dev

在Rails中使用Rack gem

来自分类Dev

如何使用rails config gem?

来自分类Dev

在Rails中使用Rack gem

来自分类Dev

使用 CarrierWave on Rails 上传文件后刷新页面

来自分类Dev

无法使用Carrierwave上传多张图片

来自分类Dev

使用 JSON API 和 CarrierWave 上传视频

来自分类Dev

将Carrierwave和Capistrano与Rails结合使用

来自分类Dev

Rails 嵌套属性不使用carrierwave 保存

来自分类Dev

通过电子邮件Ruby on Rails发送“ carrierwave” gem附件

来自分类Dev

无法使用回形针gem上传图像

来自分类Dev

无法使用回形针gem上传图像

来自分类Dev

使用Ruby on Rails Twitter Gem在Twitter上上传多个图像

来自分类Dev

如何使用gem在Ubuntu上安装Rails

来自分类Dev

Rails:使用gem卸载特定版本的库

来自分类Dev

gem在Rails中使用OpenStreetMap获得坐标

来自分类Dev

使用gem内部的rails作为依赖项

来自分类Dev

如何使用Rails中的gem布局?

Related 相关文章

热门标签

归档