LINUX.ORG.RU

Утилита для 'удаленной' загрузки файлов


1

1

Есть у меня потребность загружать большие файлы на компе, но с телефона :) Что-нибудь вроде отправил ссылку - и она скачалась. Есть множество вариантов это сделать, но хотелось бы найти что-то готовое. Может кто-то сталкивался и знает - подскажите.

Вот несколько вариантов «того что надо»:

* демон который может получить ссылку(через файл или XMPP) и скачать/выполнить скрипт над неё

* готовый(чужой) веб-сервис куда отправил ссылку а он потихоньку заливает её на твой указанный WebDAV/FTP(Google/Yandex Disk) ресурс

* возможно плагин к ownCloud(там уже есть возможность подключения external storage и возможность загрузки файла из ссылки но надо висеть на странице) - обратился на правильно составленную ссылку и ownCloud на фоне начал скачку файла.

* ну или что-нить в этом духе о чем я не догадываюсь

Если эта служба будет на собственной машине - хорошо, если где-нить в вебе - тоже неплохо.

1. Можно написать небольшой php скриптик + WEB-морду, который это делает.
2. Есть замечательный WEB-сервер на bash. Думаю, немного его модифицировав, можно получить то, что тебе нужно. Перед анализом рекомендую расставить переводы строки где нужно и нормально назвать переменные.

Kroz ★★★★★ ()
Ответ на: комментарий от rezedent12

ssh и wget пробовал использовать?

С телефона-то? Думается, вариант TC-а c xmpp получше будет. Правда если у него нормальные ссылки (а то web2.0 и все дела).

anonymous ()

pyxmpp я вроде когда-то ковырял, очень несложная штука. заставить его по приходу сообщения от определенного jid'а качать файл по ссылке - задача минут на 10, из которых 8 будет завариваться кофе

marvin_yorke ★★★ ()
Ответ на: комментарий от Kroz

Можно написать небольшой php скриптик + WEB-морду, который это делает.
php скриптик
php

за такое нужно расчленять.
To TS: Банальный bash скрипт который парсит запрос и использует wget. Каким образом будешь передавать запрос — зависит лишь от твоей фантазии. Я бы написал java апплет и разруливал через web. Но ssh и расшаренный каталог тоже вариант.

comp00 ★★★★ ()
Ответ на: комментарий от comp00

за такое нужно расчленять.

У вас садистские наклонности. И, излишняя любовь к java: для такой задачи это пушкой по воробьям.

Kroz ★★★★★ ()

Кстати, вот еще пару идей:
3. Слать e-mail с ссылкой, на компе принимается/выделяется посредством fetchmail/procmail и передается скрипту. Делается просто.
4. Если есть лишний телефон, можно даже через SMS.

Короче, пространство для фантазии огромное.

Kroz ★★★★★ ()
Ответ на: комментарий от Kroz

У вас садистские наклонности

в отношении php они уместны

излишняя любовь к java

у меня излишняя любовь к с++, но без фреймворков на них в веб не попишешь, да и разговор не о них.

для такой задачи это пушкой по воробьям.

Во первых, можно джаву заменить на питон, во вторых можно не ограничиваться только одной задачей, а написать вебморду еще_чего_нибудь

comp00 ★★★★ ()
Ответ на: комментарий от sin_a

Screen

И «чо» чем сильно он тут поможет? Ладно, какой обработчик на url повесить «послать ..» -> ssh -> скрипт на серверной стороне.

И выборочное цитирование, искажающее контекст - некрасиво. Лучше показать почему screen будет _лучше варианта с xmpp_ (чатики с браузером из коробки обычно общаются, даже на относительно старых телефонах).

anonymous ()
Ответ на: комментарий от anonymous

Думал имеется в виду нестабильное соединение на телефоне.

sin_a ★★★★★ ()
Ответ на: комментарий от comp00

в отношении php они уместны

Однобокий взгляд. Для каждой задачи хорош свой инструмент. И если ты не владеешь каким-то инструментом, это не значит что он плохой.

Kroz ★★★★★ ()

«Мав час, мав натхнення» (C)

Внизу - bash-скриптик, который крутится в памяти, наблюдает за файлом «tasks.csv» и скачивает по очереди URL'ы, указанные в этом файле. tasks.csv содержит 4 поля, разделенных табуляцией: url, имя файла, PID активного wget который сейчас работает над этим URL'ом, прогресс загрузки. Два последних заполняются автоматически. Имя файла - опционально, если хочешь сохранить под нужным именем; если не укажешь - после загрузки сюда подставит имя, под которым реально был сохранен контент по URL. Прогресс загрузки: "-" - не начиналась, «Completed» - завершилась, «X%» - сколько процентов скачалось, «Error» - произошла ошибка во время скачивания.

В общем, чтобы добавить задание, достаточно добавить новый URL в конец файла (про табуляции можно забыть).

Тебе осталось написать что-то для добавления URL'а в файл: WEB-морду, парсер e-mail или парсер SMS.

#!/bin/sh

LOG="download.log"
TASKS="tasks.csv"
TMP="tasks_tmp.csv"

WGET_PID=""
while true; do
  if [[ -f "$LOG" ]]; then
   
    STATUS_ACTIVE=`cat "$LOG" | grep " saved "`
    if [[ -z "$STATUS_ACTIVE" ]]; then 
      PROGRESS_ACTIVE=`cat $LOG | grep '\.\.\.' | grep "%" | tail -n 1`
      PROGRESS_ACTIVE="${PROGRESS_ACTIVE%\%*}"
      PROGRESS_ACTIVE="${PROGRESS_ACTIVE##* }"
    else
      PROGRESS_ACTIVE="Completed"
      OFILE_ACTIVE="${STATUS_ACTIVE%’*}"
      OFILE_ACTIVE="${OFILE_ACTIVE#*‘}"
    fi
  fi

  URL_NEXT=""
  OFILE_NEXT=""
  NEED_NEXT="Yes"
  if [[ -f "$TASKS" ]] ; then
  
    cat /dev/null > "$TMP"
    while read URL OFILE PID PROGRESS OTHER ; do
      [[ -z "$URL" ]] && continue;
      
      [[ -z "$OFILE" ]] && OFILE="-"
      [[ -z "$PID" ]] && PID="-"
      [[ -z "$PROGRESS" ]] && PROGRESS="-"
      
      if [[ ! "$PID" == "-" ]]; then
        if [[ "$PID" == "$WGET_PID" ]]; then # This is the file we are downloading
          PROGRESS="$PROGRESS_ACTIVE"
          PID_ACTIVE=`ps --pid $PID -o pid= `
          if [[ -n "$PID_ACTIVE" ]] ; then # Still downloading...
            NEED_NEXT=""
          else
            if [[ "$PROGRESS" == "Completed" ]]; then
              OFILE="$OFILE_ACTIVE"
              echo "Completed '$URL'"
            else
              PROGRESS="Error"
              echo "Error for '$URL'"
            fi
            PID="-"
          fi
        else
          PID="-"
        fi
      fi
      if [[ "$PROGRESS$URL_NEXT" == "-" ]] ; then
        URL_NEXT="$URL"
        OFILE_NEXT="$OFILE"
      fi
      
      echo -e "$URL\t$OFILE\t$PID\t$PROGRESS">>"$TMP"

    done < "$TASKS"
    mv "$TMP" "$TASKS"
    
  fi
  
  [[ -z "$NEED_NEXT" ]] && URL_NEXT=""
  if [[ -n "$URL_NEXT" ]]; then # Need to start next downloading
  
    echo "Downloading '$URL_NEXT'..."
    
    OFILE_NEXT_PARA=""
    [[ ! "$OFILE_NEXT" == "-" ]] && OFILE_NEXT_PARA="-O $OFILE_NEXT"
    
    cat /dev/null > "$LOG"
    
    wget "$URL_NEXT" $OFILE_NEXT_PARA -o "$LOG" &
    WGET_PID="$!"
    
    cat /dev/null > "$TMP"
    while read URL OFILE PID PROGRESS OTHER ; do
      [[ "$URL$OFILE" == "$URL_NEXT$OFILE_NEXT" ]] && PID="$WGET_PID" && PROGRESS="0%"
      echo -e "$URL\t$OFILE\t$PID\t$PROGRESS">>"$TMP"
    done < "$TASKS"
    mv "$TMP" "$TASKS"
    
  fi
  
  sleep 1
  
done
Kroz ★★★★★ ()
Ответ на: комментарий от Kroz

Подводя итоги можно сказать что без собственного велосипеда(с той или иной степенью новизны) не обойтись. Спасибо ответы.

Скорее всего воспользуюсь этим скриптом и неткатом с парсингом передаваемого урла.

jerry_ru ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.