byłem w stanie napisać JavaScript, aby spowodować przeglądarkę, aby pobrać plik ze zdalnego serwera przy użyciu kodu:Jak uzyskać przeglądarkę internetową, aby pobrać plik zapisany w ciągu JavaScript?
var iframe = document.createElement("iframe");
iframe.style.display = "none";
iframe.src = "filename.zip"
document.body.appendChild(iframe);
który działa świetnie. Jednak teraz mam inną sytuację, w której zawartość pliku jest przechowywana w ciągu znaków w moim JavaScript po stronie przeglądarki i muszę wyzwolić pobieranie tego pliku. Próbowałem zastępując trzecią linię wyżej z tym, gdzie „myFileContents” to ciąg zawierający rzeczywiste bajtów pliku:
iframe.src = "data:application/octet-stream;base64," + Base64.encode(myFileContents);
to pobiera plik pobrany, ale nazwa pliku jest stracone. W Chrome nazwa pliku to "pobierz". Przeczytałem również, że w niektórych wersjach przeglądarek istnieją ograniczenia dotyczące rozmiaru pliku.
Czy istnieje sposób, aby to osiągnąć? Używanie JQuery byłoby OK. Rozwiązanie musi obsługiwać dowolny typ pliku - zip, pdf, csv, PNG, JPG, XLS, itp ...
Dzięki. Znalazłem inny wpis, w którym ktoś wspomniał o tym, jak opublikować zawartość pliku i nazwę pliku na serwerze sieciowym, a następnie zwrócić mu pełną odpowiedź z nagłówkiem Content-disposition. Przykładowa implementacja znajduje się tutaj: https://code.google.com/p/download-data-uri/. Próbowałem uniknąć tej metody z powodu problemów z wydajnością przez nadmiarową transmisję. Wypróbuję sztuczkę "a.download" i zobaczę, jakie przeglądarki ją obsługują. Dzięki. –
Twoje rozwiązanie działa bardzo dobrze w Chrome, ale obecnie nie działa w żadnej innej przeglądarce. Przyjmuję tę odpowiedź, dopóki nie pojawi się lepsza sugestia. Pomyślałem, że nadal może być sposób na wykorzystanie sztuczki iframe z jakimś fałszywym wpisem do ajax'a i fałszywą odpowiedzią, ale nie wiedziałbym, jak to zrobić. –
Zamiast 'a.click()' możesz użyć 'var clickEvent = document.createEvent (" MouseEvent "); clickEvent.initEvent ("click", true, true); a.dispatchEvent (clickEvent); ', aby działało w przeglądarce Firefox i Chrome –