Jeszcze o umieszcznaniu plików na blogu

Wspomniałem już, że do zamieszczania skryptów potrzebne było mi osobne miejsce. Ale właśnie wpadłem na pomysł, że może jednak nie. Pliki które są tak małe, że rozmiarami porównywalne z długością linka można w całości zapisać w kodzie strony jako link. Zamiast adresu zaczynającego się od http: można użyć adresu zaczynającego się od data: a dokładniej data:application/octet-stream;base64, i dalej zawartość pliku zakodowana w base64

Na przykład skrypt w pythonie służący do generowania takich właśnie linków file_to_link.py (jako parametr podajemy plik a skrypt wygeneruje nam gotowy kod do wklejenia na stronę)
Rozwiązanie to stosowne jest od dawna, aby przyspieszyć ładowanie stron zawierających dużo, bardzo małych obrazków. Niestety przy plikach które chcemy sobie zapisać na dysku ma pewną wadę; przeglądarka nie będzie potrafiła zasugerować nazwy pod jaką zapisać plik. Firefox domyślnie poda kilka losowych liter z dodaną końcówką part co wygląda niezbyt estetycznie, Opera zasugeruje nazwę „default” a Chrome w ogóle żadnej. Z tym, że akurat Chrome obsługuje niestandardowy atrybut download po którym można podać nazwę pliku jaka ma zostać zasugerowana przy zapisie. Ciekawe czy ten atrybut wejdzie do standardu i zostanie zaimplementowany przez inne przeglądarki, mam nadzieję, że tak.
Jeśli chcemy umieścić na stronie plik tekstowy, taki którego treść przy okazji chcemy wyświetlić, to istnieje jeszcze drugi sposób na jego pobranie. Zamiast kodować z użyciem base64 i zapisywać go drugi raz w linku można użyć javaskryptu który przeczyta wybrany fragment strony i na jego podstawie wygeneruje nam link w locie gdy ktoś na niego kliknie.
Napisałem sobie właśnie taką prostą jednolnijkową funkcję
pobierz
którą trzeba wkleić gdzieś na stronie. Treść która ma zostać pobrana jako plik umieszczamy wewnątrz znacznika pre (jeśli nie zależny nam na zachowaniu formatowania przy wyświetlaniu może być też div, p albo cokolwiek innego) któremu nadajemy określony identyfikator. Później jako adres linku do pobrania podajemy javascript:pobieracz('identyfikator');

2 komentarze:

  1. Jaki dopisać parametr, aby skrypt zamienił plik na Base64?

    OdpowiedzUsuń
    Odpowiedzi
    1. Po prostu nazwę pliku do zamienianie na base64.

      Usuń