File.basename(open(source_url))
は動作しません。ソートは、File.basename
のような文字列ではありません。 URLは、いくつかのpath/to/service/with/parameters/in/line/like/this
タイプのエンコーディングを使用している場合を除き
File.basename(source_url)
は、作業のよりよいチャンスを持っているでしょう。
RubyのURIライブラリには、ここで役立つ便利なツールがあります。次のようなものがあります:
File.basename(URI.parse(source_url).path)
が出発点になります。例えば:
require 'uri'
File.basename(URI.parse('http://www.example.com/path/to/file/index.html').path
# => "index.html"
と:私はあまりにもファイルサイズを盗んとどのようにできるかどう
File.basename(URI.parse('http://www.example.com/path/to/file/index.html?foo=bar').path)
# => "index.html"
知っていますか?
ローカルHTTPのものをテストするのに最適な方法は、コマンドラインからgem server
を実行して、宝石はそのドキュメントのために少しのWebサーバを起動させることです。
require 'open-uri'
html_doc = open('http://0.0.0.0:8808/') do |io|
puts io.size
io.read
end
puts html_doc.size
# => 114350
# => 114350
あなたがブロックを使用しますOpenURIのopen
コマンドを使用すると、Tempfile
クラスのインスタンスであるブロック変数の接続に関する多くの情報にアクセスできます。したがって、着信ファイルのサイズはsize
を使用して調べることができます。
小さなファイルの場合は問題ありませんが、大きなファイルを取得する場合は、head
リクエストを送信するためにNet :: HTTPを使用して調べることをおすすめします。にサイズが含まれている可能性があります。私はかもしれませんが、動的コンテンツの場合はどれだけ返されるか、言いたいことが気にしないCGIやサブサービスによって返されるコンテンツがどれくらいあるかをサーバが知らないことがあるので、
"ヘッド"リクエストを使用する利点は、サーバーがコンテンツ全体(ヘッダーのみ)を返さないことです。だから、これまでは、私が必要とするデータを得ることができるかどうかを確認するために、head
を使ってリクエストを行うことになっていました。そうでない場合は、通常のget
を使用して完全な応答を引き出す必要があります。
ありがとう、私もファイルサイズを取得することができますか、ファイルのすべてのMBを取得するのを待つことなく知っていますか? – ElektroStudios
Content-lengthヘッダーを調べます。 – Danyel