sinatra和http PUT

mar*_*eri 5 ruby rack sinatra

假设我想使用curl以这种方式将文件放到web服务中

curl -v --location --upload-file file.txt http://localhost:4567/upload/filename
Run Code Online (Sandbox Code Playgroud)

在sinatra我能做到:

#!/usr/bin/env ruby

require 'rubygems'
require 'sinatra'

put '/upload/:id' do
   #
   # tbd
   #
end
Run Code Online (Sandbox Code Playgroud)

我该如何阅读流媒体文件?

或多或少我想要这样的东西:http: //www.php.net/manual/en/features.file-upload.put-method.php#56985

Ben*_*Ben 4

最基本的示例是将其写入您正在运行 sinatra 的当前目录,而不检查现有文件......只是破坏它们。

#!/usr/bin/env ruby

require 'rubygems'
require 'sinatra'

put '/upload/:id' do
  File.open(params[:id], 'w+') do |file|
    file.write(request.body.read)
  end
end
Run Code Online (Sandbox Code Playgroud)

另外,您可以在curl命令中省略文件名部分,它会用文件名为您填充它。敌人的例子:

curl -v --location --upload-file file.txt http://localhost:4567/upload/
Run Code Online (Sandbox Code Playgroud)

将导致将文件写入http://localhost:4567/upload/file.txt