• 30-11-2024, 12:57:54
    #1
    Merhaba, İşletmem için geliştirdiğim bir depo yönetimi yazılımı için yardımcı araç olarak geliştirdiğim hızlı resim yükleme yazılımının ilk halini ücretsiz paylaşıyorum. Çok basit ve gelişime açık index.php kodları :

    <?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $uploadDir = 'uploads/';
    
        if (!is_dir($uploadDir)) {
            mkdir($uploadDir, 0755, true);
        }
    
        $response = [];
        foreach ($_FILES['image']['name'] as $key => $fileName) {
            $uniqueId = uniqid();
            $fileExtension = pathinfo($fileName, PATHINFO_EXTENSION);
            $shortFileName = $uniqueId . '.' . $fileExtension;
            $targetFile = $uploadDir . $shortFileName;
    
            $imageFileType = strtolower($fileExtension);
            $allowedTypes = ['jpg', 'jpeg', 'png', 'gif'];
    
            if (!in_array($imageFileType, $allowedTypes)) {
                $response[] = ['success' => false, 'message' => 'Sadece JPG, JPEG, PNG ve GIF dosyaları yüklenebilir.'];
                continue;
            }
    
            if ($_FILES['image']['size'][$key] > 5 * 1024 * 1024) {
                $response[] = ['success' => false, 'message' => 'Dosya boyutu 5MB\'yi aşamaz.'];
                continue;
            }
    
            if (move_uploaded_file($_FILES['image']['tmp_name'][$key], $targetFile)) {
                file_put_contents($targetFile . '.time', time());
                $shortUrl = 'http://' . $_SERVER['HTTP_HOST'] . '/uploads/' . $shortFileName;
                $response[] = [
                    'success' => true,
                    'url' => $shortUrl,
                    'preview' => $shortUrl
                ];
            } else {
                $response[] = ['success' => false, 'message' => 'Resim yüklenirken bir hata oluştu.'];
            }
        }
    
        echo json_encode($response);
        exit;
    }
    ?>
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>CorexDepo | Hızlı Resim Yükle</title>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
        <style>
            body {
                background: linear-gradient(135deg, #6e7dff, #1c92d2);
                font-family: 'Roboto', sans-serif;
            }
            .container {
                max-width: 700px;
                margin: auto;
                background: #fff;
                padding: 40px;
                border-radius: 10px;
                box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
            }
            h1 {
                text-align: center;
                color: #333;
                margin-bottom: 30px;
            }
            .progress-container {
                display: none;
                margin-top: 20px;
            }
            .progress {
                height: 25px;
                border-radius: 12px;
                overflow: hidden;
            }
            .progress-bar {
                transition: width 0.4s ease-in-out;
            }
            .image-preview-container {
                display: flex;
                flex-wrap: wrap;
                gap: 20px;
                margin-top: 30px;
            }
            .image-item {
        text-align: center;
        border: 1px solid #ddd;
        border-radius: 8px;
        padding: 15px;
        background: #f9f9f9;
        margin-bottom: 20px;
    }
    .image-item img {
        max-width: 100%;
        border-radius: 8px;
        margin-bottom: 10px;
    }
    
            .copy-btn {
                background: #0d6efd;
                color: #fff;
                border: none;
                padding: 8px 12px;
                cursor: pointer;
                border-radius: 4px;
                font-size: 0.9rem;
                transition: background-color 0.3s;
            }
            .copy-btn:hover {
                background: #0b5ed7;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <h1>Hızlı Resim Yükleme</h1>
            <form id="uploadForm" enctype="multipart/form-data" class="mb-4">
                <div class="mb-3">
                    <label for="image" class="form-label">Resim Seçin (En Fazla 7 Adet):</label>
                    <input type="file" name="image[]" id="image" class="form-control" multiple required>
                </div>
                <button type="submit" class="btn btn-primary w-100">Yükle</button>
            </form>
    
            <div class="progress-container">
                <div class="progress">
                    <div class="progress-bar bg-success" role="progressbar" style="width: 0%;" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
                </div>
                <p class="text-center mt-2" id="loadingText">Yükleme Başladı...</p>
            </div>
    
            <div class="image-preview-container" id="previewContainer"></div>
        </div>
    
        <script>
            const uploadForm = document.getElementById('uploadForm');
            const progressContainer = document.querySelector('.progress-container');
            const progressBar = document.querySelector('.progress-bar');
            const loadingText = document.getElementById('loadingText');
            const previewContainer = document.getElementById('previewContainer');
            const imageInput = document.getElementById('image');
    
            uploadForm.addEventListener('submit', async (e) => {
                e.preventDefault();
                if (imageInput.files.length > 7) {
                    alert('En fazla 7 dosya yükleyebilirsiniz.');
                    return;
                }
    
                const formData = new FormData(uploadForm);
                progressContainer.style.display = 'block';
                progressBar.style.width = '0%';
                loadingText.textContent = 'Yükleme Başladı...';
    
                const xhr = new XMLHttpRequest();
                xhr.open('POST', '', true);
    
                xhr.upload.onprogress = (event) => {
                    if (event.lengthComputable) {
                        const percentComplete = Math.round((event.loaded / event.total) * 100);
                        progressBar.style.width = `${percentComplete}%`;
                        loadingText.textContent = `Yükleniyor: %${percentComplete}`;
                    }
                };
    
                xhr.onload = () => {
        if (xhr.status === 200) {
            const result = JSON.parse(xhr.responseText);
            previewContainer.innerHTML = '';
            result.forEach(file => {
                const imageItem = document.createElement('div');
                imageItem.classList.add('image-item');
                if (file.success) {
                    imageItem.innerHTML = `
                        <img src="${file.preview}" alt="Önizleme">
                        <input type="text" value="${file.url}" class="form-control mb-2" readonly>
                        <button class="copy-btn" onclick="copyToClipboard('${file.url}')">Linki Kopyala</button>
                    `;
                } else {
                    imageItem.textContent = file.message;
                }
                previewContainer.appendChild(imageItem);
            });
            loadingText.textContent = 'Yükleme Tamamlandı!';
        } else {
            loadingText.textContent = 'Sunucu Hatası.';
        }
    };
    
    
                xhr.onerror = () => {
                    loadingText.textContent = 'Yükleme Başarısız.';
                };
    
                xhr.send(formData);
            });
    
            function copyToClipboard(url) {
                navigator.clipboard.writeText(url).then(() => alert('Link kopyalandı!'));
            }
        </script>
    </body>
    </html>


  • 30-11-2024, 13:17:25
    #2
    Başarılı olmuş, elinize sağlık.
  • 30-11-2024, 13:30:24
    #3
    Depra adlı üyeden alıntı: mesajı görüntüle
    Başarılı olmuş, elinize sağlık.
    Teşekkür ederim 🙏
  • 30-11-2024, 13:41:33
    #4
    Bu sayfa çalışmıyor hatası alıyorum
  • 30-11-2024, 13:42:58
    #5
    mertkann adlı üyeden alıntı: mesajı görüntüle
    Bu sayfa çalışmıyor hatası alıyorum
    Hosting mi kullanıyorsunuz ve görsel atar mısınız
  • 30-11-2024, 14:23:54
    #6
    konu için teşekkürler prtscr kullanmak yerine kendi domainim üzerinde geliştireceğim.
  • 30-11-2024, 15:41:01
    #7
    ⭐⭐⭐⭐⭐
    Teşekkürler.