웹 서버에 직접 파일을 다운로드하려면 어떻게 해야 합니까?

웹 서버에 직접 파일을 다운로드하려면 어떻게 해야 합니까?

내가 직접 설정한 서버이든 Dropbox와 같은 호스팅 서비스이든 관계없이 호스팅 서버에 파일을 직접 다운로드하고 싶습니다.

예를 들어, 팟캐스트를 다운로드할 때 내 컴퓨터에 다운로드한 다음 서버에 업로드하는 대신 클라우드에 직접 다운로드할 수 있는 방법이 있습니다. 여기서 나의 관심은 랩톱의 데이터 요금제를 통해 사용하는 트래픽을 줄이는 것입니다. 따라서 컴퓨터가 파일을 캐싱하는 물리적 중개자 역할을 하는 것을 원하지 않습니다.

이상적으로는 다운로드 링크를 갖고 내 서버로 직접 이동하도록 지시하는 방법이 있을 것입니다. 이 작업을 어떻게 수행할 수 있습니까?

나는 이 질문이 잠재적으로 "웹 앱"과 관련이 있고 잠재적으로 "서버 관리"와 관련이 있다는 것을 알고 있습니다. 내 목표는 내 컴퓨터를 루프에서 잘라내는 것이므로 사람들이 이것이 주제에서 벗어났으며 다른 사이트에 있어야 한다고 말하는 것을 볼 수 있습니다. . 내 문제는 다음과 같습니다. 이것이 웹앱 솔루션이 될지 서버 솔루션이 될지는 모르겠지만 컴퓨터를 사용하여 이 작업을 수행할 것이며 현재 완료된 기능을 대체할 것이라는 점은 알고 있습니다. 내 컴퓨터에 있어서 여기에 물어봐야겠다고 생각했어요. 제가 틀렸고 이것이 확실히 webapps에 있어야 한다면 저에게 알려주시거나 그냥 마이그레이션해 주세요.

답변1

다음을 수행할 수 있습니다.

  • VNC를 서버에 연결하고 브라우저를 로드한 다음 파일을 다운로드합니다.
  • SSH를 통해 서버에 접속하고 CLI(curl? wget?)를 사용한다는 점만 제외하면 기본적으로 동일한 작업을 수행합니다. SSH를 사용하여 원격 명령을 실행할 수 있습니다. 보다이에 대한 예에 대한 ulidtko의 답변.
  • 파일 다운로드 URL(웹 서비스?)을 대기열에 추가할 수 있는 애플리케이션을 서버에 만듭니다. 대기열을 폴링하여 대기열이 빌 때까지 각 파일을 다운로드할 수 있습니다.

답변2

CLI를 사용하면 이는 매우 쉽습니다.

$ URL="http://upload.wikimedia.org/wikipedia/commons/1/15/Red_Apple.jpg"
$ ssh user@remote-host '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) [image/jpeg]
저장 위치: `Red_Apple.jpg'

     0K .......... ................ .......... .......... ......... .8% 327K 2s
    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 (777KB/s) - `Red_Apple.jpg' 저장됨 [576216/576216]

여기서는 두 가지 중요한 도구를 사용합니다.SSH그리고wget. 대부분의 출력은 wget— 그러나 시작된 wget 인스턴스의 출력입니다.원격 컴퓨터에서; 파일은 user의 홈 디렉토리 에 저장됩니다 remote-host.

답변3

이제 이것은 공유 호스팅을 사용하는지 아니면 훨씬 더 자유로운 것을 사용하는지에 따라 달라집니다. 전자라면 추악한 덩어리 여야합니다.

VPS 또는 효과적인 시스템을 갖춘 다른 호스팅이 있는 경우 토렌트 클라이언트와 같은 필요한 것을 설정할 수 있습니다.토렌트플럭스전체 액세스 및/또는 앞서 언급한 ssh/cli 클라이언트 방법을 원하는 경우(그러나 충분히 지루하다면 서버에 링크를 업로드하는 드롭박스와 영리한 cron 스크립트를 결합하는 것은 놀라울 정도로 모욕적인 방법이 될 것입니다. 시스템에서 어떤 파일을 열고/다운로드할지).

더 많은 대역폭을 절약하기 위해 주기적으로 다운로드를 청크로 압축하여 업로드할 수도 있습니다.

답변4

대상 서버에 "다운로드"라는 폴더를 만듭니다. 이 코드를 파일에 저장 .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> 

관련 정보