Multiple Upload [Çözüm]

Arkadaşlar Upload kütüphanesi tekil yüklemeye göre yazılmış olduğu için ve araştırmalarda karşınıza çıkan Multiple Upload örneklerinin kütüphaneye uyarlanmasının bazen kafa karıştırıcı olması nedeniyle kendi ürettiğim çoklu dosya yükleme çözümünü yazmak istedim. Yazmış olduğum kod, post edilen File'ın multiple ya da single olma durumunu da kontrol etmekte.

Bu yöntemi seçme sebebim varsayılan kütüphanelere müdahale etmeden ya da 3. parti kütüphane yüklemeden kullanıma devam etmek.

Controller Method


public function imageUpload(){
$file = Request::files('file');

if(is_array($file['name']) && count($file['name']) > 1){
// Çoklu upload
$images = array();

$file_count = count($file['name']);

for($i=0; $i < $file_count; $i++){
$img = array();

$img['name'] = $file['name'][$i];
$img['type'] = $file['type'][$i];
$img['tmp_name'] = $file['tmp_name'][$i];
$img['error'] = $file['error'][$i];
$img['size'] = $file['size'][$i];

$images[$i] = $img;
}

foreach ($images as $image){
Upload::file($image);
}

}else{
// Tekil upload durumunda = multiple olmayan ve name'i array olmayan input
Upload::file($file);
}
}

Cevaplar (1)


NegaXY
PHP Developer
1 yıl önce

Neden önce for ile gönderilen array ayrılıp sonra images isimli bir array oluşturuluyor ve foreach ile Upload'a gönderiliyor konusunda bir açıklama yapayım.

Bir multiple upload post edildiğinde request ile gelen file'ı ekrana yazdırdığınızda dosyaların ayrı değil, name, tmp_name gibi anahtarlar altında her dosyanın verilerinin gruplandığını görürsünüz. Aşağıdaki gibi;


Array
(
[name] => Array
(
[0] => test-1.png
[1] => test-2.png
)
[type] => Array
(
[0] => image/png
[1] => image/png
)
[tmp_name] => Array
(
[0] => C:wamp64tmpphp2F0B.tmp
[1] => C:wamp64tmpphp2F0C.tmp
)
[error] => Array
(
[0] => 0
[1] => 0
)
[size] => Array
(
[0] => 41418
[1] => 22773
)
)


Yukarıdaki array verisini bu hali ile Upload kütüphanesine göndermek hata verecektir. Upload kütüphanesine Upload::file() ile tek bir dosyanın verilerini dizi olarak göndermemiz gerekiyor.

Bu nedenle elimizdeki diziyi önce her dosyanın verilerini kendi içinde gruplayacak şekilde parçalamamız, sonra da Upload kütüphanesine döngü ile göndermemiz gerekiyor. Kendi içinde grupladığımız ve türettiğimiz yeni $images dizisi aşağıdaki gibi bir çıktı üretecektir.


Array
(
[0] => Array
(
[name] => test-1.png
[type] => image/png
[tmp_name] => C:wamp64tmpphpB4C1.tmp
[error] => 0
[size] => 41418
)
[1] => Array
(
[name] => test-2.png
[type] => image/png
[tmp_name] => C:wamp64tmpphpB4C2.tmp
[error] => 0
[size] => 22773
)
)

Cevap Yazın


[code=php,css,sql]kod[/code] , [url=http:...com] , [img=imaj linki] , [color=renk_kodu]metin[/color]