Plupload ile dosya yüklemek

plupload_ile_dosya_yuklemek

Plupload oldukça güzel bir dosya yükleme script’i. Web sayfanız üzerinden aynı anda birçok dosya seçip sunucuya yükleyebilirsiniz. Flash, HTML5 gibi birçok yöntemle dosya yüklemesi yapabilen bu ücretsiz script’in en güzel özelliği resim dosyalarını upload etmeden önce yeniden boyutlandırabiliyor. Böylece yüksek boyutlu fotografların yükleme zamanı kısalıyor. Buradan örnekleri inceleyebilirsiniz. Kendi arabirimini kullanmadan da JQuery ile  yükleme yaptırtmak mümkün (custom example da örneği gösterilmiş) Ayırca script, resim dosyalarını göndermeden önce ön izleme de sunabiliyor ve dosyaları sürükle bırak desteği ile de seçtirebiliyor. Ayarlamanıza izin verdiği chunk_size parametresi  gigabyte’larca veriyi zaman aşımına uğramadan (sunucudaki php betiği için) parçalar halinde de upload edebiliyor. Hazırladığım örnek dosyayı indirerek, kendiniz de deneyimleyebilirsiniz.

[Yükleme bulunamadı.]

index.html dosyasının içeriği:

<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>Plupload - Örnek</title>
    <link rel="stylesheet" href="js/jquery.plupload.queue/css/jquery.plupload.queue.css" type="text/css" media="screen" />
    <script src="js/jquery.js"></script>
    <script type="text/javascript" src="js/plupload.full.min.js"></script>
    <script type="text/javascript" src="js/jquery.plupload.queue/jquery.plupload.queue.js"></script>
    <script src="js/i18n/tr.js" charset="utf-8"></script>
</head>
<body style="font: 13px Verdana; background: #eee; color: #333">
    <div style="float: left; margin-right: 20px">
        <div id="flash_uploader" style="width: 500px; height: 330px;">Tarayıcınızda flash desteği yok.</div>
    </div>
    <script type="text/javascript">
    $(function() {
 
        $("#flash_uploader").pluploadQueue({
 
            runtimes : 'flash',     // Gönderme metodu
            url : 'upload.php',     // Dosyaları işecek php betiği
            chunk_size : '1mb',     // Azami paröa boyutu boyutu
            unique_names : true,
 
            filters : {
                max_file_size : '10mb', // Azami dosya boyutu
                mime_types: [
                    {title : "Fotoğrafları seçin", extensions : "jpg"} // Destek verilecek uzantılar  extensions : "jpg,gif,png"
                ]
            },
 
            // Eğer mümkünse resimleri tarayicida yeniden boyutlandır
            resize : {width : 320, height : 240, quality : 90},
 
            // Flash settings
            flash_swf_url : 'js/Moxie.swf'      // Yükleyici SWF dosyasının patikası ve adı
        });
    });
    </script>
</body>
</html>

upload.php dosyasının içeriği:

<?php
/**
 * upload.php
 *
 * Copyright 2009, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */
 
// HTTP headers for no cache etc
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
 
// Settings
//$targetDir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload";
$targetDir = 'uploads';
 
 
$cleanupTargetDir = true; // Remove old files
$maxFileAge = 5 * 3600; // Temp file age in seconds
 
// 5 minutes execution time
@set_time_limit(5 * 60);
 
// Uncomment this one to fake upload time
// usleep(5000);
 
// Get parameters
$chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;
$chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0;
$fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : '';
 
// Clean the fileName for security reasons
$fileName = preg_replace('/[^\w\._]+/', '_', $fileName);
 
// Make sure the fileName is unique but only if chunking is disabled
if ($chunks < 2 && file_exists($targetDir . DIRECTORY_SEPARATOR . $fileName)) {
    $ext = strrpos($fileName, '.');
    $fileName_a = substr($fileName, 0, $ext);
    $fileName_b = substr($fileName, $ext);
 
    $count = 1;
    while (file_exists($targetDir . DIRECTORY_SEPARATOR . $fileName_a . '_' . $count . $fileName_b))
        $count++;
 
    $fileName = $fileName_a . '_' . $count . $fileName_b;
}
 
$filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName;
 
// Create target dir
if (!file_exists($targetDir))
    @mkdir($targetDir);
 
// Remove old temp files    
if ($cleanupTargetDir && is_dir($targetDir) && ($dir = opendir($targetDir))) {
    while (($file = readdir($dir)) !== false) {
        $tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file;
 
        // Remove temp file if it is older than the max age and is not the current file
        if (preg_match('/\.part$/', $file) && (filemtime($tmpfilePath) < time() - $maxFileAge) && ($tmpfilePath != "{$filePath}.part")) {
            @unlink($tmpfilePath);
        }
    }
 
    closedir($dir);
} else
    die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}');
     
 
// Look for the content type header
if (isset($_SERVER["HTTP_CONTENT_TYPE"]))
    $contentType = $_SERVER["HTTP_CONTENT_TYPE"];
 
if (isset($_SERVER["CONTENT_TYPE"]))
    $contentType = $_SERVER["CONTENT_TYPE"];
 
// Handle non multipart uploads older WebKit versions didn't support multipart in HTML5
if (strpos($contentType, "multipart") !== false) {
    if (isset($_FILES['file']['tmp_name']) && is_uploaded_file($_FILES['file']['tmp_name'])) {
        // Open temp file
        $out = fopen("{$filePath}.part", $chunk == 0 ? "wb" : "ab");
        if ($out) {
            // Read binary input stream and append it to temp file
            $in = fopen($_FILES['file']['tmp_name'], "rb");
 
            if ($in) {
                while ($buff = fread($in, 4096))
                    fwrite($out, $buff);
            } else
                die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
            fclose($in);
            fclose($out);
            @unlink($_FILES['file']['tmp_name']);
        } else
            die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
    } else
        die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}');
} else {
    // Open temp file
    $out = fopen("{$filePath}.part", $chunk == 0 ? "wb" : "ab");
    if ($out) {
        // Read binary input stream and append it to temp file
        $in = fopen("php://input", "rb");
 
        if ($in) {
            while ($buff = fread($in, 4096))
                fwrite($out, $buff);
        } else
            die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
 
        fclose($in);
        fclose($out);
    } else
        die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
}
 
// Check if file has been uploaded
if (!$chunks || $chunk == $chunks - 1) {
    // Strip the temp .part suffix off 
    rename("{$filePath}.part", $filePath);
}
 
 
// Return JSON-RPC response
die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}');
 
?>

Yazar: Özgür Koca

Yazar - Tankado.com

“Plupload ile dosya yüklemek” için bir yorum

  1. Merhaba Hocam verdiğiniz Bilgilerden Dolayı teşekkür ederim. Bende aslında asp C# programlama dilleri üzerine yoğunlaşmış pic basic ve micro c gibi elektronik tabanlık programlama görmüş acemilerden birisiyim. Konu başlığını aratmamın sebebi ise çalışmış olduğum kurumda kendi ağımız iççinde beliki ileride dışarıdanda kullanıcıların dosya sürükleyip yükleyebilmelerini ve aynı zamanda indirebilmielerini sağlayacak küçük çaplı bir otomasyon yapmak istiyor olmamdır.Sizin bilgi ve tecrübelerinizle birlikte nasıl bir yol izlemem gerekir sizce ? Xampp ile sunucu ve veri tabanı kurmam gerek sanırım ama dediğim gibi acemiyim sunucuuyu kurdum birde istemciler için bunları Panel Tasarlamalıyım vericeğiniz bilgiler için şimdiden teşekkür ederim

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site istenmeyenleri azaltmak için Akismet kullanır. Yorum verilerinizin nasıl işlendiğini öğrenin.