![Как загрузить файл непосредственно на веб-сервер?](https://rvso.com/image/1264380/%D0%9A%D0%B0%D0%BA%20%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D1%84%D0%B0%D0%B9%D0%BB%20%D0%BD%D0%B5%D0%BF%D0%BE%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%20%D0%BD%D0%B0%20%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%3F.png)
Я хотел бы загружать файлы непосредственно на размещенный сервер, будь то тот, который я настроил самостоятельно, или размещенный сервис, такой как Dropbox.
Например, когда я скачиваю подкаст, вместо того, чтобы загрузить его на свой компьютер, а затем загрузить на сервер, как я могу загрузить его напрямую в облако? Мой интерес здесь заключается в уменьшении трафика, который я использую по тарифному плану на моем ноутбуке, поэтому я не хочу, чтобы мой компьютер выступал в качестве физического посредника, кэширующего файл.
В идеале, было бы как-то сделать ссылку на скачивание и указать, чтобы она шла прямо на мой сервер. Как мне это сделать?
Я понимаю, что этот вопрос потенциально касается "веб-приложения" и потенциально касается "администрирования сервера", и поскольку моя цель — вывести свой компьютер из цикла, я вижу, как люди говорят, что это не по теме и должно быть на другом сайте. Моя проблема заключается в следующем: я не знаю, будет ли это решением веб-приложения или серверным решением, но я знаю, что в любом случае я буду использовать компьютер, чтобы сделать это, и я заменяю функцию, которая в настоящее время выполняется на моем компьютере, поэтому я решил спросить об этом здесь. Если я ошибаюсь и это определенно должно быть в веб-приложениях, не стесняйтесь сообщить мне или просто перенесите это.
решение1
Вы могли бы:
- Подключитесь к серверу по VNC, запустите браузер и скачайте файл.
- SSH-подключение к серверу и выполнение по сути того же самого, но с использованием CLI (curl? wget?). Можно использовать SSH для выполнения удаленной команды; см.ответ ulidtko на пример этого.
- Создайте приложение на сервере, которое может ставить в очередь URL-адреса загрузок файлов (веб-сервис?). Оно может опрашивать очередь, загружая каждый файл, пока очередь не опустеет.
решение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) [image/jpeg] Сохранение в: `Red_Apple.jpg' 0К .......... .......... .......... .......... .......... 8% 327К 2с 50К .......... .......... .......... .......... .......... 17% 668К 1с 100 тыс. .......... .......... .......... .......... .......... 26% 1,23 млн 1с 150 тыс. .......... .......... .......... .......... .......... 35% 1,23 млн 1с 200К .......... .......... .......... .......... .......... 44% 697К 0с 250К .......... .......... .......... .......... .......... 53% 1,15 млн. нулей 300К .......... .......... .......... .......... .......... 62% 707К 0с 350К .......... .......... .......... .......... .......... 71% 1,13 млн. нулей 400К .......... .......... .......... .......... .......... 79% 713К 0с 450К .......... .......... .......... .......... .......... 88% 1,13 млн. нулей 500К .......... .......... .......... .......... .......... 97% 702К 0с 550К .......... .. 100% 3.13M=0.7с 2011-02-05 11:15:11 (777 КБ/с) - `Red_Apple.jpg' сохранен [576216/576216]
Здесь мы используем два важных инструмента:сшиwget. Большая часть вывода wget
— но это вывод запущенного экземпляра wgetна удаленной машине; файл сохраняется в user
домашнем каталоге пользователя remote-host
.
решение3
теперь это будет зависеть от того, используете ли вы общий хостинг или что-то с гораздо большей свободой. Если это первое, то это должно быть уродливым cludge.
Если бы у вас был VPS или какой-либо другой хостинг с фактически собственной системой, вы могли бы настроить то, что вам нужно — например, торрент-клиент, что-то вродеtorrentfluxесли вам нужен полный доступ и/или вышеупомянутый метод клиента 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>