Bawię się pomysłem stworzenia całkowicie opartego na JavaScript narzędzia do zip / unzip, do którego każdy może uzyskać dostęp z przeglądarki. Mogą po prostu przeciągnąć plik zip bezpośrednio do przeglądarki, co pozwoli im pobrać wszystkie pliki. Mogą również tworzyć nowe pliki zip, przeciągając pojedyncze pliki do.
Wiem, że lepiej byłoby zrobić to na serwerze, ale ten projekt jest tylko dla odrobiny zabawy.
Przeciąganie plików do przeglądarki powinno być łatwe, jeśli skorzystam z różnych dostępnych metod. (Styl Gmail)
Miejmy nadzieję, że kodowanie / dekodowanie powinno być w porządku. Widziałem kilka bibliotek as3 zip, więc jestem pewien, że powinienem być w porządku.
Moim problemem jest pobieranie plików na końcu.
window.location = 'data:jpg/image;base64,/9j/4AAQSkZJR....'
działa to dobrze w firefox, ale nie w chrome.
Mogę osadzać pliki jako obrazy dobrze w chrome używając <img src="data:jpg/image;ba.." />
, ale pliki niekoniecznie muszą być obrazami. Mogą mieć dowolny format.
Czy ktoś może wymyślić inne rozwiązanie lub jakieś obejście?
źródło
Odpowiedzi:
Pomysły:
Wypróbuj
<a href="data:...." target="_blank">
(nieprzetestowane)Użyj downloadify zamiast adresów URL danych (zadziała również dla IE)
źródło
Jeśli chcesz również nadać plikowi sugerowaną nazwę (zamiast domyślnego `` pobierania ''), możesz użyć następujących w Chrome, Firefox i niektórych wersjach IE:
A poniższy przykład pokazuje jego użycie:
źródło
link.click()
zamiast swojej -funkcjieventFire
... jsfiddle.net/ARTsinn/Ezx5mlub:
źródło
Chcę podzielić się moim doświadczeniem i pomóc komuś, kto utknął w pobieranych plikach, które nie działają w Firefoksie i zaktualizowanej odpowiedzi na 2014 rok. Poniższy fragment będzie działał zarówno w przeglądarce Firefox, jak i Chrome i przyjmie nazwę pliku:
źródło
download
atrybutu. W każdym razie dzięki, to jest tak blisko, jak mogę w tej chwili.btoa
nie jest zdefiniowane (np. W projekcie frontendowym z węzłem)const btxt = new Buffer(text).toString('base64'); const uri = 'data:text/csv;charset=utf-8;base64,' + btxt + ';'
Oto czyste rozwiązanie JavaScript, które testowałem, działając w przeglądarkach Firefox i Chrome, ale nie w Internet Explorerze:
Dotychczas znalezione rozwiązania dla różnych przeglądarek:
downloadify -> Wymaga Flasha
databounce -> Testowane w IE 10 i 11 i nie działa dla mnie. Wymaga serwletu i pewnych dostosowań. (Nieprawidłowo wykrywa nawigator. Musiałem ustawić IE w trybie zgodności, aby przetestować, domyślny zestaw znaków w serwlecie, obiekt opcji JavaScript z poprawną ścieżką do serwletu dla ścieżek bezwzględnych ...) W przypadku przeglądarek innych niż IE otwiera plik w tym samym oknie.
download.js -> http://danml.com/download.html Inna biblioteka podobna, ale nie przetestowana. Twierdzi, że jest czystym JavaScriptem, nie wymaga serwletu ani Flasha, ale nie działa w IE <= 9.
źródło
Istnieje kilka rozwiązań, ale zależą one od HTML5 i nie zostały jeszcze w pełni zaimplementowane w niektórych przeglądarkach. Poniższe przykłady zostały przetestowane w Chrome i Firefox (częściowo działa).
document.location.href
identyfikator URI danych.<a href="your-data-uri" download="filename.txt">
do określenia nazwy pliku.źródło
Łącząc odpowiedzi z @owencm i @ Chazt3n, ta funkcja pozwoli na pobranie tekstu z IE11, Firefoxa i Chrome. (Przepraszamy, nie mam dostępu do Safari ani Opery, ale jeśli spróbujesz i zadziała, dodaj komentarz).
źródło
Dla każdego, kto ma problemy z IE:
Proszę, zagłosuj za odpowiedzią Yetti: zapisywanie kanwy lokalnie w IE
źródło
Twój problem zasadniczo sprowadza się do stwierdzenia, że „nie wszystkie przeglądarki to obsługują”.
Możesz wypróbować obejście i udostępnić rozpakowane pliki z obiektu Flash, ale wtedy stracisz czystość samego JS (w każdym razie nie jestem pewien, czy możesz obecnie „przeciągać pliki do przeglądarki” bez jakiegoś rozwiązania Flash - czy to może funkcja HTML5?)
źródło