Bu soru çözüldü.
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 Developer1 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

NegaXY
1 yıl önce sordu.Çok Okunanlar
- 9015 [v2.x] Mail gönderme - SMTP connect() failed
- 5876 [v1.x] Sınırsız Kategori/Menu Bulabildiğim en iyi çözüm !
- 2314 [v1.x] Üye giriş ve kayıt olması ?
- 2310 [v1.x] TitanPhp örnek uygulamalar
- 2200 [v1.x] Sınırsız Kategori/Menu ÖNEMLİ
- 2158 [v1.x] index.php?url şeklinde kullanmadan controllere erişemiyorum.
- 1937 [v2.x] vendor/autoload hatası (kurulum)
- 1905 [v1.x] Veritabanı Kayıt Ekleme
- 1702 [v1.x] $this->load->plugin('template');
- 1600 [v1.x] fonksiyonların içinde veritabanı işlemi