oshi.at uploader (μblog)
Oshi.at, transfer.sh či 0x0.st sú užitočné služby na dočasné uloženie veľkých súborov. V μblogu si ukážeme, ako na oshi.at nahrať súbor z prostredia príkazového riadku a pomocou eLisp-u.
Opis
Služby opísané v perexe veľa ľudí pozná. Transfer.sh a aj 0x0.st sú známejšie. Služba oshi.at je menej známa, ale určite nemenej zaujímavá.
Ako bolo naznačené, slúži na nahratie súboru, ktorý môže byť na serveri max. 90 dní a po nahratí stačí niekomu poslať vygenerovaný link, napríklad emailom. 0x0.st robí to isté, ale tam je počet dní expirácie nepriamo úmerný veľkosti súboru.
Niečo podobné robila ukončená služba od Mozilly, volala sa tuším Send (?), a samozrejme existujú služby ako WeTransfer, či Úschovňa. Posledne menované majú jeden veľký neduh - pri nahrávaní súborov je potrebné zadávanie emailových adries, či nebodaj registrácia a nejde na nich nahrávať z pohodlia príkazového riadku.
Oshi.at voľakde tvrdí, že:
- rešpektuje súkromie používateľov,
- interakcia s príkazovým riadkom a nahrávanie prostredníctvom metódy PUT (
curl -T
), - nahrávanie cez TCP cez netcat a telnet,
- voliteľné okamžité zničenie po stiahnutí,
- čas vypršania platnosti definovaný používateľom,
- jednoduché administračné rozhranie,
- detekcia duplicitných súborov pomocou súčtov SHA.
Ako nahrať súbor z bashu?
Na linku https://oshi.at/cmd je niekoľko príkladov, ako to spraviť, rôznymi metódami. Je to opisné a myslím, že to netreba viac komentovať.
Jedine to šikovne zaobaliť do nejakého skriptu alebo aliasu. Ja som to spravil nasledovne (bash guru-ovia prosím odpustia, ale nepíšem (už) skoro vôbec skripty v bashi 😏).
#!/bin/bash echo echo "▬▮ oshi.at using cURL ▮▬" if [ $# -lt 2 ]; then echo 1>&2 "$0: not enough arguments" echo "It must be: oshi.sh <filename> <expiration days>" exit 2 elif [ $# -gt 2 ]; then echo 1>&2 "$0: too many arguments" echo "It must be: oshi.sh <filename> <expiration days>" exit 2 fi echo -n "Using cURL located in: " which curl if [ $? -gt 0 ]; then echo 1>&2 "! cURL package not installed in the system !" exit 2 fi echo -n "Using stat located in: " which stat if [ $? -gt 0 ]; then echo 1>&2 "! stat is missing, I won't check the file size !" else if [ `stat -c%s $1` -gt 5000000000 ]; then echo 1>&2 "! Your file is too big (more than 5000 MB) !" exit 2 fi fi echo -n "Expire in days: " echo $2 let minutes=$2*24*60 echo "Uploading: " curl https://oshi.at -F f=@$1 -F expire=$minutes -# | tee /dev/null
A ako z Emacsu?
No samozrejme zavolaním skriptu z shellu alebo eshellu. Ale zdalo sa mi elegantnejšie napísať si na to funkciu:
(defun upload-file-oshi-at (file-path) "Uploads a file to oshi.at using async-shell-command; asking for filename and expiration time (in days)" (interactive "FEnter file (max. ~5 GB): ") (let* ((expire-time (read-number "Enter expiration time (days): ")) (exp-time-days (* 1440 expire-time)) (upload-command (format "curl https://oshi.at -F f=@%s -F expire=%s " file-path exp-time-days)) (output-buffer-name "*Oshi.at Upload Result*")) (generate-new-buffer output-buffer-name) (switch-to-buffer output-buffer-name) (async-shell-command upload-command (current-buffer)) (insert "\nUploading, please wait…") (insert "\ncURL command: " upload-command) (read-only-mode) ))
Využitím async-shell-command
dosiahneme, že počas nahrávania nie je Emacs blokovaný. Nakoniec, ako je to asi čitateľné aj z kódu, tak v bufferi Oshi.at Upload Result máme vygenerované linky na spravovanie a stiahnutie súboru.
Pár obrázkov na záver:
Zas a znova (…pamätníci doplnia…) sa ukazuje, ako efektívne je používanie príkazového riadku. Alebo - ak sa šikovný skript nejako integruje napr. i do správcu súborov.
Pre pridávanie komentárov sa musíte prihlásiť.
Dík za upozornenie na zaujímavú službu. Len akosi nechápem, prečo to používať cez bash, keď interaktívne použitie tejto služby je tak pohodlné. Ak pominiem fakt, že to cez bash nie každý dá, nechápem v čom spočíva výhoda ísť na to cez bash.
Tak, v prípade, že tam ideš súkať veľa súborov v cykle, tak by to mohlo mať zmysel, aj keď neviem, kde je tá hranica, kedy sa mi to oplatí. Či pri 10 súboroch alebo 100, aby písanie a odlaďovanie toho scriptu nebolo dlhšie, než cez interaktívny prístup. Súkať tam súbory zo servera bez DE je asi jediné naozaj zmysluplné použitie, avšak zrovna servery asi nie sú tou cieľovou platformou pre túto službu, to skôr jednotliví užívatelia. A ta posledná možnosť mi pripadá iba z ríše teoretických možností, než reálne využitie. Automatizácia sa používa na opakované rutinné činnosti, čo si v danom prípade iba ťažko viem predstaviť.
este mi napadol taky remote http Filesystem :D
Súvisí to aj workflowom. Napr. presne práve teraz som písal mail, a popri tom som s mailom chcel poslať fotky (> 50 MB) nejakého zariadenia.
Preskočil som do buffra so súbormi, zbalil ich, zavolal funkciu a potom, keď sa to nahralo, tak som jednoducho prekopíroval link do mailu. Bolo to veľmi rýchle, bez použitia myši, navyše to kopírovanie linku bolo v zmysle útoku velociraptora (pomocou rozšírenia AVY, bez presunu kurzora do druhého okna či bufferu, raz o tomto poklade napíšem blog) - bez varovania priamo za cieľom!
toto je tiez cool: nc -q2 oshi.at 7777 < /path/to/file