WebDAV in Ruby
サーバ
Rackアプリケーションのライブラリがある
が、すでに動かなくなっている
WEBrickはRuby3から標準ライブラリではないので追加でinstall URI.unescapeはdeprecated、というか取り除かれたので呼び出せない
サーバ起動まで
code:shell
$ docker run --rm -it -w /app -v $PWD:/app -p 127.0.0.1:9292:9292/tcp ruby:3.0.2 bash
# tree
.
├── Gemfile
├── config.ru
└── files/
# bundle
# rackup -o 0.0.0.0
code:Gemfile
gem 'rack_dav'
gem 'webrick'
code:config.ru
require 'rubygems'
require 'rack_dav'
module URI
def self.unescape(str)
str
end
end
use Rack::CommonLogger
run RackDAV::Handler.new(:root => './files')
クライアント
まずはshellで
ディレクトリ作成
code:shell
HTTP/1.1 201 Created
Transfer-Encoding: chunked
Server: WEBrick/1.7.0 (Ruby/3.0.2/2021-07-07)
Date: Thu, 16 Sep 2021 10:05:37 GMT
Connection: Keep-Alive
ファイルアップロード
code:shell
$ cat test.csv
a,b
1,2
HTTP/1.1 201 Created
Transfer-Encoding: chunked
Server: WEBrick/1.7.0 (Ruby/3.0.2/2021-07-07)
Date: Thu, 16 Sep 2021 10:06:05 GMT
Connection: Keep-Alive
ファイルダウンロード
code:sh
HTTP/1.1 200 OK
Etag: 176761cf-9-6143170d
Content-Type: application/octet-stream
Content-Length: 9
Last-Modified: Thu, 16 Sep 2021 10:06:05 GMT
Server: WEBrick/1.7.0 (Ruby/3.0.2/2021-07-07)
Date: Thu, 16 Sep 2021 10:18:26 GMT
Connection: Keep-Alive
a,b
1,2
Rubyクライアント
ファイルダウンロード
code:ruby
require 'net/http'
=> "a,b\n1,2\n\n"
req = Net::HTTP::Get.new(url.path)
res = Net::HTTP.start(url.host, url.port) {|http|
http.request(req)
}
res.body
=> "a,b\n1,2\n\n"
ファイル削除
code:ruby
req = Net::HTTP::Delete.new(url.path)
res = Net::HTTP.start(url.host, url.port) {|http|
http.request(req)
}
ファイルアップロード
code:ruby
req = Net::HTTP::Put.new(url.path)
req.content_length = File.size('./test.csv')
res = Net::HTTP.start(url.host, url.port) {|http|
File.open('./test.csv', 'rb'){ |io|
req.body_stream = io
http.request(req)
}
}
参考