Pobieranie obrazka na dysk poprzez kliknięcie na link

Witam serdecznie.

mam katalog pełen zdjęć. Chciałbym zrobić skrypt, który “ukryje” prawdziwe ścieżki przed użytkownikiem i umożliwi ściągnięcie zdjęcia na dysk użytkownika.

Czyli reasumując:

  1. mamy link “download” ( download)

  2. klikamy go

  3. rozpoczyna się ściąganie zdjęcia na dysk.

Udało mi się zmontować coś takiego:

<?php

 $filename = 'error.png';//wybieramy plik do ściągnięcia

header('Content-Type:application/force-download');//ustawiamy mu uniwersalny typ mime (można bawić się w nadawanie mu application/msword, image/gif, itd...

header('Content-Disposition: attachment; filename='.basename($filename).';');//tutaj podajemy nazwę pliku - domyślnie ustawiłem, aby plik nazywał się tak jak oryginał

header('Content-Length:'.@filesize($filename));//dodajemy wielkość pliku

@readfile($filename)or die('File not found.');//czytamy plik 

 ?>

Pliki się automatycznie ściągają, jednak jest problem z tym iż pobrane pliki graficzne (w tym przypadku png) nie otwierają się po pobraniu (wyskakuje błąd)…

Wiecie może dlaczego??

Bardzo proszę o pomoc,

Northwest

Moja grafika

[/code]




Nie lepiej tak ? Jak zostawisz tylko

[code]download
to po kliknięciu zacznie pobierać obrazek z oryginalną nazwą. Jeżeli jednak chciałbyś zmienić, to właśnie musisz wpisać tak:

download="Moja grafika"

np. obrazek w oryginale nazywa się “ptak”, lecz wpisując coś pomiędzy “” nadajesz temu nazwę która zostanie do niego przypisana. Pozdrawiam

nie rozumie co masz na myśli :frowning:

Jeżeli wpiszesz tylko to:

Moja grafika[/code]




To ktoś klikając na tekst "Moja grafika" pobierze zdjęcie, które podlinkowałeś poprzez href. I to zdjęcie będzie się nazywało foto.png/jpg itp.



Jeżeli natomiast wpiszesz to :

[code]Moja grafika

To ten ktoś pobierze obrazek z jego oryginalną nazwą. Rozumiesz ? Jeżeli do atrybutu ‘‘download’’ dopiszesz jakąś wartość, to tak zostanie nazwany plik.

NP. wgrywasz na serwer zdjęcie o nazwie “ryba.png”, a w atrybucie download dopiszesz np rower to po kliknięciu na link pobierzesz rower.png, jeżeli natomiast do html dopiszesz samo download to pobierzesz ryba.png :slight_smile: Myślę, że rozjaśniłem co nie co :slight_smile: Pzdr

PHP jest tu nie potrzebne.

jacko1998 miał na myśli nowy atrybut download znacznika w HTML5:

http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download

http://davidwalsh.name/download-attribute

aha, rozumiem teraz :slight_smile: a na jakich przeglądarkach to nie będzie chodziło??:wink:

IE 8 pewnie nie będzie tego wspierał, może IE 9 już tak, raczej IE 10 wspiera.

Tylko szczerze mówiąc po co Ci ten znacznik? On za wiele nie ułatwia, a jego funkcjonalność można obejść właściwym linkiem i skryptem w PHP (na przykład).

właśnie… chciałem w php to zrobić, ale tutaj poradzono mi ten znacznik…

Mam po prostu galerię zdjęć i pod spodem chce zrobić link “pobierz fotkę” - po kliknięciu na to, php ma rozpocząć ściąganie pliku graficznego na dysk użytkownika… i tyle :slight_smile:

kombinowałem z tym kodem php powyżej… ściąga mi zdjęcia na dysk, ale coś niepoprawnie bo nie idzie ich później otworzyć…

Mógłbym prosić o pomoc?

Wrzuć to do neta, by można było to sprawdzić, bo mnie Twój kod działa poprawnie (pobierałem testowy plik JPG) po kliknięciu na link

Pobierz plik[/code]

w dokumencie HTML.

http://mybutterfly.website.pl/img/foto.php tutaj jest skrypt :slight_smile:

to jest to, co podałem w poście powyżej… ściąga obrazek poprawnie,ale coś nie działa przy otwarciu :frowning:

Ja pobrałem plik i mi się on poprawnie otwiera (w IrfanView): r7zy.jpg

kurcze,to dziwne :confused:

ja mam taki komunikat:

Przeglądarka fotografii systemu Windows nie może otworzyć tego obrazu, ponieważ plik jest prawdopodobnie zniszczony, uszkodzony lub jest zbyt duży. :confused:

Ale masz skądś ten plik źródłowy (error.png), który przez link pobierasz? Ten “źródłowy” plik możesz normalnie otworzyć, a ten pobrany przez link już nie? A co jak go najpierw zapiszesz, z potem zechcesz otworzyć? A jak to jest z innym plikiem?