ファイルを Web サーバーに直接ダウンロードするにはどうすればよいですか?

ファイルを Web サーバーに直接ダウンロードするにはどうすればよいですか?

自分でセットアップしたサーバーでも、Dropbox のようなホストされたサービスでも、ホストされたサーバーにファイルを直接ダウンロードしたいと思います。

たとえば、ポッドキャストをダウンロードする場合、それをコンピューターにダウンロードしてからサーバーにアップロードするのではなく、クラウドに直接ダウンロードするにはどうすればよいでしょうか。ここでの私の関心は、ラップトップの従量制データ プランで使用しているトラフィックを削減することなので、コンピューターがファイルをキャッシュする物理的な仲介役として機能しないようにしたいのです。

理想的には、ダウンロード リンクを用意して、それを直接自分のサーバーに送る方法があるはずです。どうすればこれを実現できますか?

この質問は「Web アプリ」と「サーバー管理」に関係している可能性があると認識しています。私の目標はコンピューターをループから切り離すことなので、これはトピック外であり、別のサイトに投稿すべきだという意見も理解できます。私の問題は次のとおりです。これが Web アプリ ソリューションになるのか、サーバー ソリューションになるのかはわかりませんが、いずれにしてもコンピューターを使用して実行すること、現在コンピューターで実行している機能を置き換えることはわかっているので、ここで質問することにしました。私が間違っていて、これが間違いなく Web アプリであるべきである場合は、遠慮なくお知らせください。または、移行してください。

答え1

あなたは出来る:

  • サーバーに VNC で接続し、ブラウザをロードして、ファイルをダウンロードします。
  • SSHでサーバーに接続し、CLI(curl? wget?)を使用して基本的に同じ操作を行います。SSHを使用してリモートコマンドを実行することもできます。この例に対するulidtkoの回答
  • ファイル ダウンロードの URL をキューに入れることができるアプリケーション (Web サービス?) をサーバー上に作成します。キューをポーリングして、キューが空になるまで各ファイルをダウンロードできます。

答え2

CLI を使用すると、これは非常に簡単です。

$ URL="http://upload.wikimedia.org/wikipedia/commons/1/15/Red_Apple.jpg"
$ ssh ユーザー@リモートホスト 'wget $URL'

--2011-02-05 11:15:10-- http://upload.wikimedia.org/wikipedia/commons/1/15/Red_Apple.jpg
upload.wikimedia.org を解決しています... 91.198.174.234
upload.wikimedia.org|91.198.174.234|:80 に接続しています... 接続されました。
HTTP リクエストが送信されました。応答を待っています... 200 OK
長さ: 576216 (563K) [画像/jpeg]
保存先: `Red_Apple.jpg'

     0K .......... .......... .......... .......... 8% 327K 2秒
    50K .......... .......... .......... .......... 17% 668K 1秒
   100K .......... .......... .......... .......... 26% 123万 1秒
   150K .......... .......... .......... .......... 35% 123万 1秒
   200K .......... .......... .......... .......... 44% 697K 0秒
   250K .......... .......... .......... .......... 53% 115万 0秒
   300K .......... .......... .......... .......... 62% 707K 0秒
   350K .......... .......... .......... .......... 71% 113万 0秒
   400K .......... .......... .......... .......... 79% 713K 0秒
   450K .......... .......... .......... .......... 88% 113万 0秒
   500K .......... .......... .......... .......... 97% 702K 0秒
   550K .......... .. 100% 3.13M=0.7秒

2011-02-05 11:15:11 (777 KB/s) - `Red_Apple.jpg' を保存しました [576216/576216]

ここでは、2 つの重要なツールを使用します。sshそしてwget出力のほとんどはwget—からのものですが、wgetインスタンスの起動の出力ですリモートマシン上; ファイルはuserのホームディレクトリに保存されますremote-host

答え3

さて、これは共有ホスティングを使用しているか、それとももっと自由度の高いものを使用しているかによって異なります。前者の場合、それは醜いゴツゴツしたものになるはずです。

VPSやその他のホスティングサービスをお持ちで、実質的に自分専用のシステムを持っている場合は、必要なもの(たとえば、トレントクライアントなど)を設定できます。トレントフラックス完全なアクセスと/または前述の ssh/cli クライアント メソッドのいずれかが必要な場合 (ただし、退屈な場合は、リンクをサーバーにアップロードするための Dropbox と巧妙な cron スクリプトを組み合わせると、どのファイルを何で開く/ダウンロードするかをシステムに指示する非常に悪質な方法になります)。

さらに帯域幅を節約するために、ダウンロードを定期的にチャンクに圧縮してアップロードすることもできます。

答え4

宛先サーバーに「downloads」というフォルダーを作成します。このコードをファイルに保存し.php、宛先サーバーで実行します。

<html>
<form method="post">
<input name="url" size="50" />
<input name="submit" type="submit" />
</form>
<?php

// maximum execution time in seconds
set_time_limit (24 * 60 * 60);

if (!isset($_POST['submit'])) die();


// folder to save downloaded files to. must end with slash
$destination_folder = 'downloads/';

$url = $_POST['url'];
$newfname = $destination_folder . basename($url);

$file = fopen ($url, "rb");
if ($file) {
  $newf = fopen ($newfname, "wb");

  if ($newf)
  while(!feof($file)) {
    fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
  }
}

if ($file) {
  fclose($file);
}

if ($newf) {
  fclose($newf);
}

?>
</html> 

関連情報