Member 3722539 Ответов: 1

Загрузите файл из определенной папки с помощью PHP и ajax


Мне необходимо загрузить различные типы файлов из папки spesicif с помощью ajax .проблема в том, что при выполнении кода я получаю это сообщение

[ здесь]
Я искал подобные учебники я не нашел решения не могли бы вы помочь

Что я уже пробовал:

Это мое index.php файл
$(function(){
    	fetchData();
    
    	function fetchData(){
    	$.ajax({
    		url:"ajax.php",
    		method:"post",
    		success:function(data){
            $('#data').html(data);
    		}
    	})
    	}
    
    	$(document).on('click','.download',function(e){
    		e.preventDefault();
    var fileName=$(this).attr("id");
    	$.ajax({
    			url:"download.php",
    			method:"post",
    			data:{fileName:fileName},
    			success:function(e){
                    alert(e);
                }
    		})
    
    	});
    })

это мое ajax.php файл, который я использую, заполняет таблицу информации о файле (например, имена и количество загрузок)


<?php

$handleDir = opendir($directory) or die('error');
$fileName = array();
$count = (count(scandir($directory)) - 2);
$output .= '<table class="table table-bordered">
<th width="20%">File Name</th>
<th width="10%">Download Count</th>
';
if ($count) {
    while ($file = readdir($handleDir)) {
        if ($file == '.' || $file == '..') {
            continue;
        }

        $fileName[] = $file;
    }

    $query = 'select * from download_manager order by  id desc';
    $fileInfo = array();
    $result = mysqli_query($link, $query);
    if (mysqli_num_rows($result)) {
        while ($singleFile = mysqli_fetch_array($result)) {
            $fileInfo[$singleFile['filename']] = $singleFile['downloads'];
        }
    }

    foreach ($fileName as $key => $value) {
        $output .= '<tr><td >
        <span class="download" id="'.$value.'">'.$value.'</span>
       </td>
       <td>'.$fileInfo[$value].'</td>
       </tr>';
    }
}

$output .= '</table>';
echo $output;

?>

И это моя ошибка загрузки php файла происходит здесь
if (isset($_POST['fileName'])) {
    $fileName = $_POST['fileName'];

    if (file_exists($directory.'/'.$fileName)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename='.$directory.'/'.$fileName);
        header('Content-Length: '.filesize($directory.'/'.$fileName));
        ob_clean();
        flush();
        readfile($directory.'/'.$fileName);
        echo 'ok';
        exit;
    } else {
        echo 'no file';
    }
}





любая помощь будет очень признательна спасибо

Richard MacCutchan

"Проблема в том, что при выполнении кода я получаю это сообщение".
И вы думаете, что мы можем догадаться, какое сообщение и где оно происходит?

Richard MacCutchan

Вы обновили вопрос, но мы все еще не знаем, какое сообщение или где оно происходит.

1 Ответов

Рейтинг:
11

Richard Deeming

$.ajax({
    url:"download.php",
    method:"post",
    data:{fileName:fileName},
    success:function(e){
        alert(e);
    }
})

Ваш код отправляет обратно байты файла, который вы хотите загрузить. Затем вы пытаетесь отобразить эти байты в виде alert, который может отображать только текст. Вот почему вы получаете сообщение, полное тарабарщины - это Javascript пытается изо всех сил интерпретировать байты как строку.

Вы не можете использовать AJAX-запрос для загрузки файла. Так как вам требуется POST запрос, вам нужно будет создать скрытый <form> указывая на вашу страницу загрузки, и отправляйте ее из вашего кода.

Кроме того, измените свой download.php код для работы с GET запрос, добавьте имя файла в строку запроса на вашей ссылке и добавьте то download атрибут[^] к ссылке.


Member 3722539

СПАСИБО