pobieranie pliku rar

pobieranie pliku rar
greenmag
  • Rejestracja:ponad 20 lat
  • Ostatnio:około godziny
  • Postów:353
0

Witam
Czy jest jakiś sposób aby zmusić przeglądarkę to wyświetlenia okna pobierania pliku rar.
Do pliku odnoszę się przez location.href co powoduje że przeglądarka Chrome oraz Edge próbuje go otworzyć w karcie przeglądarki.

edytowany 1x, ostatnio: greenmag
Freja Draco
Freja Draco
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
3

Dodanie do linku atrybutu download wymusi na przeglądarce pobieranie linku po kliknięciu weń.
Ale czy ci się wyświetli okno zapisu, czy po prostu zapisze, to już od konfiguracji przeglądarki zależy.

https://www.w3schools.com/tags/att_a_download.asp

Kopiuj
 <a href="/images/myw3schoolsimage.jpg" download="nazwa do zapisu.rar"> 

greenmag
  • Rejestracja:ponad 20 lat
  • Ostatnio:około godziny
  • Postów:353
0

Tylko że to HTML a nie js.
Czy jest odpowiednik tej metody w js?

greenmag
  • Rejestracja:ponad 20 lat
  • Ostatnio:około godziny
  • Postów:353
0

Ok. To może tak:
-klikam na element który w jquery wczytuje mi plik PHP do ukrytej warstwy div
-ten plik PHP w prosty sposób tworzy liczbę pobrań pliku który chce pobrać
-następnie powinien uruchomić pobieranie pliku rar (bez znaczenia czy ze skryptu który ładuje PHP do warstwy czy z pliku PHP ale efekt jest ten sam) który chce pobrać a on uparcie chce go otwierać w przeglądarce (chrome i edge)

edytowany 4x, ostatnio: greenmag
Freja Draco
Freja Draco
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
0

Masz tu przykładowe, gotowe rozwiązanie:
https://ourcodeworld.com/articles/read/189/how-to-create-a-file-and-generate-a-download-with-javascript-in-the-browser-without-a-server

A jak chcesz zapisać fakt pobierania, to albo wysyłasz JS-em zapytanie do pliku PHP, który to odnotuje:
https://www.w3schools.com/js/js_ajax_http_send.asp

Albo nie linkujesz bezpośrednio do pliku docelowego, tylko do PHP, który odnotuje fakt odpalenia go, a później zapoda ci z dysku odpowiednią treść.


greenmag
  • Rejestracja:ponad 20 lat
  • Ostatnio:około godziny
  • Postów:353
0

Nie mam problemu z PHP i licznikiem tylko z wywołaniem pobierania pliku rar ze skryptu js/jquery. Tak aby go pobierał a nie wyświetlał.

Freja Draco
Freja Draco
Dostałeś powyżej gotowe rozwiązanie.
99xmarcin
  • Rejestracja:około 5 lat
  • Ostatnio:6 miesięcy
  • Postów:2420
2

Klasyk, musisz zrobić tak aby server wyłał odpowiedni content-disposition: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition#As_a_response_header_for_the_main_body

W twoim przypadku w odpowiedzi powinien pojawić się nagłówek HTTP (aka header):

Kopiuj
Content-Disposition: attachment; filename="xxx.rar"

Holy sh*t, with every month serenityos.org gets better & better...
edytowany 1x, ostatnio: 99xmarcin
greenmag
  • Rejestracja:ponad 20 lat
  • Ostatnio:około godziny
  • Postów:353
0

Dziękuje - działa.

Jednak wczytując zawartość pliku php do diva przez jquery $('#licznik').load('licznik.php'); nie wiedząc dlaczego nagłówki są pomijane choć pozostały kod np zliczający kliknięcia działa więc pobiera nadal błędnie bo przeglądarka stara się go nadal wyświetlić.
Jednak w tym przypadku wystarczyło zastąpić ładowanie do diva samym location.href = 'plik.php'; w którym był ten nagłóweg aby zadziałało poprawnie

//edit1:
Działa tylko że jak się pobierze to archiwum ma niewłaściwy format?
Proszę o pomoc bo nigdy się nie bawiłem w php a muszę zrobić do końca tą jedną rzecz aby skończyć stronę :)

zawartość pliku do zliczania i inicjowania pobierania:

Kopiuj
<?php
	$plik = fopen('licznik.txt', 'r');
	$licznik = fgets($plik);
	fclose($plik);

	$licznik++;

	$plik = fopen('licznik.txt', 'w');
	fwrite($plik, $licznik);
	fclose($plik);

	header('Content-Disposition: attachment; filename="plik.rar"');
	header('plik.rar');
?>

//edit2
problem rozwiązany

Kopiuj
	header('Content-Disposition: attachment; filename="plik.rar"');
//	header('plik.rar');
	readfile('plik.rar');

po nagłówku plik należy pobrać poprzez readfile a nie headerem
jeszcze raz dziękuje za pomoc @0xmarcin

edytowany 12x, ostatnio: greenmag
99xmarcin
Jeżeli format nie ten to pewnie archiwum jest źle tworzone na serwerze. Ja już przełączyłem się w "sylwester mode" więc Ci ani dzisaj, ani jutro ;) nie pomogę :P
99xmarcin
OK to jest zwykły plik txt a nie rar, - to wiele wyjaśnia, odeślij plik jako plik.txt lub zkompresuj przed wysłaniem https://www.php.net/manual/en/zip.examples.php
greenmag
:| dlaczego zwykły txt a nie rar? licznik.txt jest plikiem w którym zapisuje ilość pobrań. plik.rar jest właściwym plikiem który chce pobrać (jego zawartość jest różnorodna)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.