Yükleme Kütüphanesi


    × Bunları biliyor muydunuz?
"Databases/ dizini bir veritabanı tablolarının şemasını oluşturup Generate::databases() komutu ile bu şemanın gerçek bir veritabanı ve tablo olarak işlenmesini sağlayabilirsiniz."


Dosya yükleme işlevini yerine getiren sınıftır. Ayrıca çoklu dosya yüklemenize olanak sağlarken dosya işlemleri hakkında veya süreçte oluşan hatalar hakkında da bilgi alabilmenizi sağlar.

 

 

# Kurulum


ZN SE ve ZN CE dağıtımları için terminal kurulum komutu.

↓ composer require znframework/package-filesystem

 

 

# Uygulamalar


# Jquery & Ajax & SweetAlert ile Çoklu Dosya Yükleme
# DropzoneJS ile Dosya Yükleme 

 

 

# INI Yapılandırması


Dosya yüklemesi ile ilgili ini ayarlarını yapmak için aşağıdaki yolda yer alan upload ayarları kullanılır.

Dosya: Settings/Ini.php
Array $settings = [] php.ini Oturum ayarları listesi.
Dosya: Settings/Htaccess.php
Bool $status = false Settings bölümündeki ayarların .htaccess dosyasına kaydedilip kaydedilmeyeceğini belirler. TRUE olması durumda ayarlar .htaccess dosyasına kaydedilir. FALSE olması durumuda sadece php_ini üzerinden yapılandırmaya çalışır.

 

 

# Yöntemler


3.0.0 This extensions(String ...$args)
5.4.1 This mimes(String ...$args)
3.0.9 This convertName(Bool $convert = true)
3.0.9 This encode(String $hash = 'md5')
3.0.9 This encodeLength(Int $encodeLength = 8)
3.0.9 This prefix(String $prefix)
3.0.9 This maxsize(Int $maxsize = 0)
3.0.9 This source(String $source = 'upload')
3.0.9 This target(String $target = UPLOADS_DIR)
1.0.0 This settings(Array $set = [])
1.0.0 Bool start(String $fileName = 'upload', String $rootDir = UPLOADS_DIR)
5.8.2.8 Bool isFile(String $inputFileName)
1.0.0 Mixed info(String $info = NULL)
1.0.3 Mixed error(Void)

 

 

# Extensions (ZN >= 3.0.0)


Hangi uzantılı dosyaların yüklenebilir olduğunu belirtmek için kullanılır.

Parametreler

String ...$extensions Yüklenebilir dosya uzantı türleri.
Return This

Kullanımı

Upload::extensions('jpg', 'png', 'gif', 'txt')->start('file');

 

 

# Mimes (ZN >= 5.4.1)


Dosya uzantıları o dosyanın gerçek kimliği hakkında bilgi vermez. Bu nedenle hangi tür dosyaların yükleneceğini sınırlamanız gerekir. Bu yöntem ile hangi mime türlerinin yüklenebilir olacağına karar verebilirsiniz.

(ZN FE 5.5.80)

Bu güncellemede mime kontrolünün doğru yapılamamasına neden olan bir hata giderildi.

Parametreler

String ...$mimes Yüklenebilir dosya içerik veri türleri.
Return This

Kullanımı

Upload::mimes('image/jpeg', 'image/png')->start('file');

 

 

# ConvertName (ZN >= 3.0.9)


Dosya isimlerinde yer alan yabancı veya özel karakterler slug tipine dönüştürülür.

(ZN FE 5.5.9)

Bu sürümden itibaren parametre olarak string verilerde kabul edilir hale getirildi. Artık kendi belirleyeceğiniz isimlendirmeleri de kullanabileceksiniz.

Parametreler

Bool $convert = true Dosya adı slug tipine çevrilsin mi?. Parametre belirtilmezse true kabul edilerek çevirme işlemi yapılır.
Return This

Kullanımı

Upload::mimes('image/jpeg', 'image/png')
      ->convertName()
      ->start('file');

 

 

# Encode (ZN >= 3.0.9)


Yüklenen dosyaya şifreli bir ön ek ekler.

(ZN FE 5.5.80)

Bu güncellemede prefix() yönteminin kullanımı encode() yöntemini devre dışı bırakacak şekilde düzenleme yapıldı. 

Parametreler

String $hash = 'md5' Ön ek hangi algoritma tarafından kodlanacağını belirtir.
Return This

Kullanımı

Upload::mimes('image/jpeg', 'image/png')
      ->encode('sha1')
      ->start('file');

 

 

# EncodeLength (ZN >= 3.0.9)


Şifrelenen ön ekin uzunluğunu ayarlamak için kullanılır.

Parametreler

Int $length = 8 Şifreli ön ekin kaç karakterden oluşacağı belirtilir.
Return This

Kullanımı

Upload::mimes('image/jpeg', 'image/png')
      ->encode('sha1')
      ->encodeLength(10)
      ->start('file');

 

 

# Prefix (ZN >= 3.0.9)


Yüklenen dosyaya kendi belirleyeceğiniz ön ek eklemek için kullanılır. Kendi belirlediğiniz ekin ön ek olmasını isterseniz encode() yönteminin parametresini false olarak ayarlamanız gerekmektedir.

(ZN FE 5.5.80)

Bu güncellemede encode() yönteminin false edilme zorunluluğu kaldırıldı. 

Parametreler

String $prefix Ön ek.
Return This

Kullanımı

Upload::mimes('image/jpeg', 'image/png')
      ->encode(false)
      ->prefix(time())
      ->start('file');

 

 

# Maxsize (ZN >= 3.0.9)


Yüklenen dosyanın boyutunun byte cinsinden en fazla kaç olacağını belirtmek için kullanılır.

(ZN FE 5.5.9)

Bu sürümden itibaren parametre olarak string verilerde kabul edilir hale getirildi. Doğrudan bayt miktarı göndermek yerine 20MB, 5KB gibi string verilerde kullanabileceksiniz.

Parametreler

Int $maxsize = 0 Yüklenen dosyanın maksimum boyutu. Boyut byte cinsinden ifade edilir.
Return This

Kullanımı

Upload::mimes('image/jpeg', 'image/png')
      ->maxsize(1024 * 1024 * 20) // 20 MB
      ->start('file');

 

 

# Source (ZN >= 3.0.9)


start() yönteminin 1. parametresi ile aynı görevi görür. Input file form nesnesinin name değerini temsil eder. Yani dosyanın hangi kaynaktan yüklendiğidir.

Parametreler

String $name = 'upload' Form::file() nesnesinin name değeri.
Return This

Kullanımı

Upload::mimes('image/jpeg', 'image/png')
      ->maxsize(1024 * 1024 * 20) // 20 MB
      ->source('file')
      ->start();

 

 

# Target (ZN >= 3.0.9)


start() yönteminin 2. parametresi ile aynı görevi görür. Dosyanın nereye yükleneceğidir. Dosyaların Ön tanımlı olarak yükleneceği dizin her projenin kendi Resources/Uploads/ dizinidir

Parametreler

String $target = UPLOADS_DIR Dosyaların yükleneceği dizin.
Return This

Kullanımı

Upload::mimes('image/jpeg', 'image/png')
      ->maxsize(1024 * 1024 * 20) // 20 MB
      ->source('file')
      ->target(FILES_DIR . 'my_uploads/')
      ->start();

Ya da;

Upload::mimes('image/jpeg', 'image/png')
      ->maxsize(1024 * 1024 * 20) // 20 MB
      ->start('file', FILES_DIR . 'my_uploads/');

gibi kullanabilirsiniz.

 

 

# Settings (ZN >= 1.0.0)


Yukarıda opsiyonel yöntemlerin yaptığı ayarları dizi olarak yapabilmek için kullanılır.

Parametreler

Array $settings Dosya yükleme ayarlarını yapılandırmak içindir.
String $extensions Hangi uzantılı dosyaların yükleneceğini belirlemek için kullanılır. Uzantılar dik çizgi(|) kullanılarak belirtilir.
String $mimes Hangi dosya türlerinin yükleneceğini belirlemek için kullanılır. Uzantılar dik çizgi(|) kullanılarak belirtilir.
String $encode = 'md5' Yüklenecek dosyaya eklenecek şifreli ön ek için hangi şifreleme algoritmasının kullanılacağı belirtilir.
Int $encodeLength = 8 Şifre uzunluğu belirtilir.
String $prefix Yüklenecek dosya ön ek koymak için kullanılır.
Int $maxsize Yüklenecek dosyanın byte cinsinden maksimum boyutunu belirlemek için kullanılır.
Bool $convertName = true Yabancı karakterler dönüştürülsün mü? Bu kullanımın amacı yabancı karakterlerden doğan yükleme sorununun önüne geçmektir.
Return This

Kullanımlar

Upload::settings
([
    'encode'     => false,
    'prefix'     => '__prefix__',
    'extensions' => 'jpg|png|gif',
    'maxsize'    => 8096
]);

Yukarıdaki her bir ayar için opsiyonel yöntemde kullanılabilir.

 

 

# Start (ZN >= 1.0.0)


Dosya yükleme işlemini başlatır.

Parametreler

String $fileInputName Form input file nesnesinin adı.
String $target = UPLOADS_DIR Dosyaların yükleneceği dizin.
Return This

Kullanımlar

Upload::settings
([
    'encode'     => false,
    'prefix'     => '__prefix__',
    'extensions' => 'jpg|png|gif',
    'maxsize'    => 8096
])->start('upload');

Opsiyonel Yöntemler ile Yapılandırma

Yukarıdaki işlemi opsiyonel seçeneklerle yapmak isterseniz;

Upload::encode(false)
      ->prefix('__prefix__')
      ->extensions('jpg', 'png', 'gif')
      ->maxsize(8*96)
      ->target('DirrentUploadDir')
      ->start('upload');

Yukarıda start('upload') yönteminde kullanılan upload yükleme işlemine konu olan <form input="file" name="upload"> nesnesinin name değeridir.

 

 

# IsFile (ZN >= 5.8.2.8)


Html [input="file"] nesnesinin değer alıp almadığını kontrol etmek için kullanılır. $_FILES['file']['name'] kullanımı gibidir.

Parametreler

String $inputFileName Html input nesnesinin adı.
Return This

Kullanımı

if( User::isFile('upload') )
{
    Upload::start('upload');
}

 

 

# Info (ZN >= 1.0.3)


Dosya işlemleri sırasında dosya hakkında bilgi almak için kullanılır. Verileri object veri tipinde döndürür. Tek bir bilgi kullanılacaksa parametre olarak bilgi ismi yazılabilir.

Parametreler

String $infoName = NULL Hangi bilginin istendiği.
name Dosya adı.
type Dosya türü.
size Dosya boyutu.
tmpName Dosya temp dizinindeki adı.
error Hata numarası.    
path Dosyanın yüklendiği yol.
encodeName Dosyanın şifreli adı.
Return Mixed

Kullanımlar

Dosya: Views/UploadExample/main.php
<?php
echo Form::enctype('multipart')->open('form');
echo Form::file('uploadFile');
echo Form::submit('uploadButton');
echo Form::close();
Dosya: Controllers/UploadExample.php
Upload::settings
([
    'encode'     => false,
    'prefix'     => '__prefix__',
    'extensions' => 'jpg|png|gif',
    'maxsize'    => 8096
])->start('uploadFile');

output( Upload::info() );
name       => string 'logosmall.png' ( length = 18 ),
type       => string 'image/png' ( length = 11 ),
size       => integer 129296 ( length = 6 ),
tmpName    => string 'xampp7/tmp/php26E9.tmp' ( length = 27 ),
error      => integer 0 ( length = 1 ),
path       => string 'xampp7/htdocs/zeroneed/Projects/Frontend/Resources/Uploads/__prefix__logosmall.png' ( length = 86 ),
encodeName => string '__prefix__logosmall.png' ( length = 24 )
$info = Upload::info();

echo $info->encodeName;
 __prefix__logosmall.png
Çoklu Dosya Yükleme Bilgisi

Çoklu dosya yükleme durumunda Upload::info() içerisinde yer alan tüm anahtarların değeri her bir yüklenen dosya için dizi türünden bilgi saklar.

$info = Upload::info();

echo $info->encodeName[0];
 __prefix__logosmall.png

Yüklenen dosya bilgilerinin veritabanına kaydedilmesi gerektiği zamanlarda döngü kullanarak kayıt işlemi yaptırabilirsiniz.

$info = Upload::info();

foreach( $info->encodeName as $encodeName )
{
    DB::insert('images', ['path' => $encodeName]);
}

 

 

# Error (ZN >= 1.0.0)


Yükleme işleminden sonra herhangi bir hatanın oluşup oluşmadığı hakkında bilgi verir.

Parametreler

Void
Return Mixed

Kullanımlar

output( Upload::error() );

 

 

# Jquery & Ajax & SweetAlert ile Çoklu Dosya Yükleme


Jquery ile ajax kullanarak dosya yüklemek için aşağıdaki adımları takip edin.

Jquery Form Script'ini Dahil Edin

Sisteminizde javascript etiketleriniz nerede yer alıyorsa aşağıdaki komutu oraya ekleyin. Bu yer genellikle [head] [/head] etiketlerinin arasıdır.

Dosya: Views/sections/head.wizard.php
@Import::style('bootstrap', 'sweetAlert')
@Import::script('jquery', 'sweetAlert')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.2.2/jquery.form.min.js"></script>
Fomu Hazırlayın

Dosya yüklemesi için form elementinin enctype değerini düzenlemeyi unutmayın.

Dosya: Views/Home/main.wizard.php
@Form::id('uploadForm')->enctype('multipart')->open()
@Form::file('upload', true)
@Form::submit('uploadButton', 'Do Upload')
@Form::close()
JS Kodlarını Hazırlayın

Form değerlerini ilgili kontrolcüye gönderebilmek için ajax kodlarımızı oluşturuyoruz.

Dosya: Views/sections/footer.wizard.php
<script>
$('#uploadForm').ajaxForm
({
    url: '{{URL::site('Home/upload')}}',
    type: 'post',
    dataType: 'json',
    success: function(data)
    {
        if( data.success !== undefined )
        {
            swal("Başarılı.", data.success, "success");
        }
        else
        {
            swal("Hatalı!", data.error, "error");
        }
    }
});
</script>
Kontrolcüyü Hazırlayın

Aşağıdaki kullanım, amaçlarınıza göre genişletilebilir.

Dosya: Controllers/Home.php
public function upload()
{
    if( ! \Http::isAjax() )
    {
        return false;
    }

    \Upload::start('upload');

    if( $error = \Upload::error() )
    {
        $data['error'] = $error;
    }
    else
    {
        $data['success'] = 'Dosya başarı ile yüklendi!';
    }

    echo json_encode($data);
}

 

 

# DropzoneJS ile Dosya Yükleme 


DropzoneJS ile ilgili detaylı kullanım için tıklayınız. Dropzone ile dosya yüklemek için aşağıdaki adımları takip edin.

Dropzone Script'ini Dahil Edin

Import kütüphanesini ile DropzoneJS'nin uzaktan linkini dahil edebilirsiniz. Sisteminizde javascript etiketleriniz nerede yer alıyorsa aşağıdaki komutu oraya ekleyin. Bu yer genellikle [head] [/head] etiketlerinin arasıdır.

Dosya: Views/sections/head.wizard.php
@Import::style('dropzone'):
@Import::script('dropzone'):
Formu Hazırlayın

Dosya yüklemesi için form elementinin enctype değerini düzenlemeyi unutmayın.

Dosya: Views/Home/main.wizard.php
@Form::action('Home/upload')->enctype('multipart')->class('dropzone')->open('form'):
<div class="fallback" id="fallback">
@Form::file('file', true):
</div>
@Form::close():
JS Kodlarını Hazırlayın

Dropzone nesnesinin 2. parametresi extra ayarları içerir. Bu parametrenin kullanımı için DropzoneJS kullanım kılavuzuna göz atın.

Dosya: Views/sections/footer.wizard.php
<script>
var dropzone = new Dropzone("#fallback");
</script>
Kontrolcüyü Hazırlayın

Aşağıdaki kullanım, amaçlarınıza göre genişletilebilir.

Dosya: Controllers/Home.php
public function upload()
{
    if( ! Http::isAjax() )
    {
        return false;
    }

    Upload::mimes('image/jpeg', 'image/png')
          ->prefix(time())
          ->start('file');
}