【问题标题】:File upload with Sinatra使用 Sinatra 上传文件
【发布时间】:2011-02-10 18:40:32
【问题描述】:

我正在尝试使用 Sinatra 上传文件。我有代码 here,但我收到错误“方法 file_hash 不存在”(请参阅​​ /lib/mvc/helpers/helpers.rb)。

这里发生了什么?我是否缺少一些依赖项。

【问题讨论】:

  • 我假设您正在尝试使用回形针。您能否再次粘贴您的代码(链接指向死页)?否则,您的解决方案是什么?

标签: ruby file-upload sinatra paperclip


【解决方案1】:

this thread 上的示例代码让我很幸运。

将其包含在此处以防链接消失:

post '/upload' do
  unless params[:file] &&
         (tmpfile = params[:file][:tempfile]) &&
         (name = params[:file][:filename])
    @error = "No file selected"
    return haml(:upload)
  end
  STDERR.puts "Uploading file, original name #{name.inspect}"
  while blk = tmpfile.read(65536)
    # here you would write it to its final location
    STDERR.puts blk.inspect
  end
  "Upload complete"
end

那么您的视图将如下所示。这使用了 HAML,但重要的部分是不要忘记在表单元素中设置 enctype,否则您将只获得文件名而不是对象:

%form{:action=>"/upload",:method=>"post"   ,:enctype=>"multipart/form-data"}
  %input{:type=>"file",:name=>"file"}
  %input{:type=>"submit",:value=>"Upload"}

【讨论】:

  • 似乎将其转储到控制台
【解决方案2】:
include FileUtils::Verbose

get '/upload' do
    erb :upload
end

post '/upload' do
    tempfile = params[:file][:tempfile] 
    filename = params[:file][:filename] 
    cp(tempfile.path, "public/uploads/#{filename}")
    'Yeaaup'
end

__END__

@@upload
<form action='/upload' enctype="multipart/form-data" method='POST'>
    <input name="file" type="file" />
    <input type="submit" value="Upload" />
</form>

【讨论】:

    【解决方案3】:

    我发现,稍作改动并使用了这个:

    if params[:file]
      filename = params[:file][:filename]
      tempfile = params[:file][:tempfile]
      target = "public/files/#{filename}"
    
      File.open(target, 'wb') {|f| f.write tempfile.read }
    end
    

    原件位于https://github.com/tbuehlmann/sinatra-fileupload,但在我的环境中存在一些配置问题。不要忘记在上传表单中添加enctype="multipart/form-data"method="POST"

    【讨论】:

    • 在我的情况下,我发现第一个哈希键是一个字符串——而不是一个符号——例如。 params['file']
    • 修复行:target = "public/files/#{filename}"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    相关资源
    最近更新 更多