Javascript İle Görsel İndirmeye Zorlama
-
Merhaba arkadaşlar, (alışkanlık oldu yazıya böyle girmek)
JavaScript ile image download ettirmek istiyorum fakat sürekli tarayıca görseli açıyor.
Bir button a bastığımda linkini verdiğim (başka sitedeki) görseli indirmesini istiyorum. İzinsiz indirmesi falan değil sağ tıkla farklı kaydetteki gibi nereye kaydedeceğini falan soracak işte, anladınız siz.
Denediğim örnek image url = https://i.pinimg.com/736x/ea/17/d9/ea17d96a19985c3d172d61f132582318.jpg
Link yapısında download attribute de ekledim fakat yine yemedi.
Stackoverflow vb bir çok sayfada örnekleri denedim fakat başarılı olamadım. Ajax ile img çekip öyle işlem yapayım dedim onda da corsf header hatası aldım.
Velhasılı kelam yardımcı olursanız sevinirim.
coder2 tarafından 23/Kas/19 13:49 tarihinde düzenlenmiştir -
İşte bunların hepsi temel html temel js bilgisinin olmaması.
<a href="img" download>
Bu link yapısı linki indirmeye zorlar. Eğer kullanıcıya göstereceksen bunu yapabilirsin.
Eğer illa js kullancam diyorsan (sebebini anlamadım)
js ile dom olarak yukarıdaki yapıyı oluşturursun, sonra bu linke tıklatırsın. Yine indirme yapar.
Kendi serverındaki dosyanın indirilmesini istiyorsan da header kullanman gerekiyor ki onu tekrar Google'dan araman lazım
-
by_Tet bunu yazdı
İşte bunların hepsi temel html temel js bilgisinin olmaması.
<a href="img" download>
Bu link yapısı linki indirmeye zorlar. Eğer kullanıcıya göstereceksen bunu yapabilirsin.
Eğer illa js kullancam diyorsan (sebebini anlamadım)
js ile dom olarak yukarıdaki yapıyı oluşturursun, sonra bu linke tıklatırsın. Yine indirme yapar.
Kendi serverındaki dosyanın indirilmesini istiyorsan da header kullanman gerekiyor ki onu tekrar Google'dan araman lazım
Hocam belirtmeyi unutmuşum konuda, html5 ile gelen download attribute de kullandım fakat olmadı.
-
coder2 bunu yazdıby_Tet bunu yazdı
İşte bunların hepsi temel html temel js bilgisinin olmaması.
<a href="img" download>
Bu link yapısı linki indirmeye zorlar. Eğer kullanıcıya göstereceksen bunu yapabilirsin.
Eğer illa js kullancam diyorsan (sebebini anlamadım)
js ile dom olarak yukarıdaki yapıyı oluşturursun, sonra bu linke tıklatırsın. Yine indirme yapar.
Kendi serverındaki dosyanın indirilmesini istiyorsan da header kullanman gerekiyor ki onu tekrar Google'dan araman lazım
Hocam belirtmeyi unutmuşum konuda, html5 ile gelen download attribute de kullandım fakat olmadı.
Cross-origin muhabbetinden sanırım https ise link
Edit:
http://devnot.com/2019/cors-nedir/
-
sunucu tarafında header a content-dispoistion vererek de yapabilirsin.
-
@by_Tet , evet hocam cross-origin sorunu. Belirttiğiniz linkte işaretli functio da denedim , fakat olmadı.
@Hbris stakoverflow da bahsettiğiniz şekilde ekleme yapmaktan bahsedenler olmuş fakat nasıl yapacağımı anlayamadım.
-
zibilyon tane yol denedim, hiçbiri olmuyor.
şöyle çözmüştüm ben.
<?php $maindir = '/ornek/'; $filename = $_GET["plink"]; $file = $maindir . $filename . '.jpg'; header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=$file"); header("Content-Type: application/zip"); header("Content-Transfer-Encoding: binary"); // read the file from disk readfile($file);
function downloadFile(plink) { location.href = '/scripts/download/slide.php?plink=' + plink; }
Ne kadar güvenilir bir yöntem bilmem.
-
coder2 bunu yazdı
@by_Tet , evet hocam cross-origin sorunu. Belirttiğiniz linkte işaretli functio da denedim , fakat olmadı.
@Hbris stakoverflow da bahsettiğiniz şekilde ekleme yapmaktan bahsedenler olmuş fakat nasıl yapacağımı anlayamadım.
Hocam link attım cors nedir diye.
Özetle zaten olmamalı csrf açığı için
Çözüm olarak da sunucu taraflı anlık çekip indirtmen gerekiyor. Üstteki örnekteki gibi
-
Php kısmında yapmayı denediğimde olmuştu @manyaki hocamın gösterdiği yapıya benzer bir mantık ile. Sunucuyu yormamak için tarayıcı üzerinde yapmak istedim fakat anlaşılan olmuyor veya bulana kadar fazla vakit kaybedeceğim.
Php kısmında sorunu çözeceğim artık.
Yardımcı olmaya çalışan arkadaşlara çok teşekkür ederim.
-
https://www.dosyaupload.com/jsNM
Burda butonla img kayıt var hocam biraz incelersen.Save button a basınca kaydediyor .
Şu şekilde:
btnSave.onclick = function () { canvasArea.toBlob(function (blob) { var link = document.createElement("a"); link.download = "draw.png"; link.href = URL.createObjectURL(blob); link.dispatchEvent(new MouseEvent('click')); }, 'image/png', 1); }
Tayga tarafından 23/Kas/19 15:53 tarihinde düzenlenmiştir