- enterId:146617 Ajax dosya yükleme « KOODLA | BLOG

Ajax dosya yükleme

Date21 / Nisan / 2008 Author İsa Engiz    Category ajax     Tags , Yorumlar4 Yorum Yapilmis.

Ajax’ın belki de en sevimli tarafı, web arayüzlerini daha etkileşimli hale getirmesidir. Kullanıcı, sunucu’dan bir istekte bulunduğunda, sayfanın yenilenmeden cevabın yazılması kadar, arada geçen sürede kullanıcıya “işleminiz gerçekleştiriliyor” tarzı bir uyarı yazısı vermek elbette ki etkileşimi arttırmaktadır.

yukleme-resim

Sunucuya dosya yükleme durumunda da böylesine bir etkileşim sağlamak istersek, güvenlik nedeniyle bunu klasik ajax teknikleri ile yapmamız biraz zor olacaktır, ama yine de bu etkileşimi sağlayacak ve uygulamanın “ajax gibi” davranmasını sağlayacak metodlar mevcuttur. Biz burada “iframe” tekniğini kullanacağız.

Uygulamanın canlı haline buradan göz atabilir veya dosyaları buradan indirebilirsiniz.

Teknik

Tekniğimiz oldukça basit:
1- Normal yükleme formu oluşturacağız
2- Yükleme formunun hedef dosyasını sayfada görünmeyen bir iframe yapacağız.
3- Form gönderildiğinde ekrana (javascript ile) “yükleniyor” yazdıracağız.
4- PHP sayfamız işini bitirdiğinde ekrana (javascript ile) “dosyanız yüklendi” yazacağız.

Ana sayfa

Ana sayfamız basit bir yükleme formundan oluşuyor:

<h1>Ajax Örnek Yükleme Formu</h1>
 
<div id="yukleme">Yükleniyor...<br/><br /><img src="yukleniyor.gif" /><br /><br />Lütfen bekleyiniz...</div>
 
<div id="yukleme_formu_alani">
Aşağıdaki form yardımıyla dosyanızı seçiniz ve yükle düğmesine tıklayınız.<br /><br />
 
<form id="yukleme_formu" action="yukle.php" method="post" enctype="multipart/form-data" target="iframe" onsubmit="yuklemeyiBaslat();" >
Dosyanız: <input name="dosya" type="file" />
<input type="submit" value="Yükle" />
</form>
</div>
<iframe id="iframe" name="iframe" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>

Burada dikkat etmemiz gereken 3 nokta var.

Birincisi “yükleniyor” yazı ve animasyonunu dokuman yüklendiğinde biz de yüklüyoruz ancak sitil dosyamızda “display:none” olarak tanımladığımızdan ilk başta gözükmüyor.

İkincisi, oluşturduğumuz yükleme formunun hedef dosyasını “iframe” id’li iframe olarak belirliyoruz ve “onsubmit” olayını ekliyoruz: “onsubmit=”yuklemeyiBaslat();””

Üçüncüsü ise iframe’in görüülebilirliğini 0 yapıyoruz, kullanıcı hiç farketmiyor.

Javascript

Uygulamanın javascript kısmı, daha önceki uygulamalarımıza göre oldukça basit, 2 tane fonksiyonumuz var:

yuklemeyiBaslat()

function yuklemeyiBaslat()
{
	document.getElementById('yukleme').style.display = 'block';
	document.getElementById('yukleme_formu_alani').style.display = 'none';
}

Bu fonksiyon, form alanında “yükle” düğmesine tıklandığında çağrılıyor ve yaptığı iki iş var, formu gizlemek ve animasyonu göstermek.

İkinci fonksiyon is yuklemeyiDurdur()

function yuklemeyiDurdur(sonuc){
      var result = '';
      if (sonuc == 1){
         result = '<div class="uyari1">Dosyanız başarıyla yüklendi!</div><br/><br/>';
      }
      else {
         result = '<div class="uyari2">Bir sorunla karşılaşıldı, dosyanız yüklenemedi!</div><br/><br/>';
      }
      document.getElementById('yukleme').style.display = 'none';
      document.getElementById('yukleme_formu').innerHTML = result + "<form id='yukleme_formu' action='yukle.php' method='post' enctype='multipart/form-data' target='iframe' onsubmit='yuklemeyiBaslat();' >Dosyanız: <input name='dosya' type='file' /><input type='submit' name='submitBtn' value='Yükle' /></form>";
      document.getElementById('yukleme_formu_alani').style.display = 'block';
}

Bu fonksiyon, PHP dosyasından dönen sonuca göre uyarı metnini belirliyor ve bu uyarı metni ile beraber formu tekrar ekrana yazdırıyor.

PHP dosyası

PHP dosyamızın kodları da yine oldukça basit:

<?php
$destination_path = getcwd().DIRECTORY_SEPARATOR;
 
$sonuc = 0;
 
$target_path = $destination_path . basename( $_FILES['dosya']['name']);
 
if(@move_uploaded_file($_FILES['dosya']['tmp_name'], $target_path))
{
	$sonuc = 1;
}
 
 sleep(1);
?>
 
<script language="javascript" type="text/javascript">window.top.yuklemeyiDurdur(<?php echo $sonuc; ?>);</script>

Basit bir yükleme olayı gerçekleştiriyor. Bu kodda asıl önemli olan yer, kodun son bölümünde yer alan javascript kısmı. Aslında bu PHP dosyamız, iframe içerisinde işleniyor, sonucunda ise az önce yukarıda belirttiğimiz yuklemeyiDurdur() fonksiyonu çağrılıyor.

Görüldüğü gibi aslında bu uygulama tam olarak bir ajax uygulaması değil, “ajax-gibi” uygulaması, daha etkileşimli bir form arayüzü hazırlamış olduk sadece.

Dosyaları buradan indirip kodları inceleyebilirsiniz.

Not:
bu yazılara göz atmak isteyebilirsiniz:

http://www.ajaxf1.com/tutorial/ajax-file-upload-tutorial.html

http://swik.net/Ajax/Ajax+Images

- Bu blogda yer alan yazıları RSS ile takip edebilirsiniz. RSS aboneliği için tıklayın.

- Ya da bu blogda yer alan bütün yazıları içindekiler sayfasında görüntüleyebilirsiniz. Tıklayın!

Ajax dosya yükleme yazısına 4 Yorum yapılmış.

  • Nurullah 02 Aralık 2008, 11:01

    selam
    link çalışmıyor,uygulama kullanışlı,türkçe anlatım olması da ayrı güzellik

  • Mustafa 10 Aralık 2008, 12:14

    selamlar

    ben de buna benzer bir uygulama yazdım. benim yazdığım kod iframe nesnelerini javascript ile oluşturmaktadır, böylece eş zamanlı birden fazla dosya yüklemek mümkün kılınıyor. kısaca uygulamanma konusunda esnekliğe biraz önem verdim. incelemek için:
    http://cookingthecode.com/a17_Sayfa-Yenilemeden-Dosya-Yuklemek-(iframe)

  • mirc 09 Ocak 2009, 11:31

    tskler..

  • gerger 17 Eylül 2010, 12:38

    İlginiz için teşekkür ederim. Güzel yazı olmuş

Arama


E-Posta Aboneliği


RSS Aboneliği

En Çok Yorumlanan Yazılar

Etiketler

404 ajax apache arama butonu as astrofizik açık kaynak banner blogger blogger/blogspot Blogger / Blogspot blogspot case chmod css date dosya yükleme editör etiket etkinlik favicon featured form ftp galeri Genel gimp hata sayfası header htaccess htpasswd ilişkisel veritabanı index innodb javascript join JQuery kategori koodla linux mysql opacity php resim url

Son Yorumlar

  • Murat: Güzel bir teknik, şu ana kadar sınırsız alt kategori lazım olmadı ama olmayacağı anlamına gelmiyor :)
  • iilyas: Bu kodlar çalışmıyor arkadaşım. Localde olduğu içinmi acaba ?
  • iilyas: Arkadaşım çok teşekkür ediyorum. Harika anlatmışsın ajaxla çalışmalara başlamak lazım estetik açısından.....
  • Nuri: bende bu şekilde bir çalışma yaptım ancak bir sorunum var ne yaptıysam url den index.php bölümünü kaldıramadım....
  • Kemal: Makale için çok teşekkürler, resimleri div tagları ile yapabilirmiyiz. Bu arada imagelara link verirsek daha...

Sayfalar


Faydalı Bağlantılar