JavaScript — Скачать файл в обработчике AJAX

Я написал небольшой скрипт, использующий только PHP, чтобы проверить функциональность загрузки файлов с помощью экспериментального API, где это работало нормально. Когда я решил зафиксировать этот код в своем проекте, я добавил тот же код в обработчик для моего вызова AJAX, однако он не запускает загрузку, как это было раньше.

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

Кто-нибудь может предложить альтернативный способ сделать это сейчас?

AJAX:

    $.ajax({
type: "POST",
url: "handler.php",
data: { 'action': 'downloadFile', 'filename': curSelectedFile },
dataType: 'json',
success: function(data)
{
//Success
}
});

PHP обработчик:

case "downloadFile":
{
$filename = '';

if (isset($_POST["filename"]))
{
$filename = $_POST["filename"];
}

$pos = 0; // Position in file to start reading from
$len = 32; // Length of bytes to read each iteration
$count = 0; // Counter for the number of bytes in the file

do
{
$result = $fm->getFileChunk($filename, $pos, $len);
$chunk = $result->result;

if (!empty($chunk))
{
$chunk = base64_decode($chunk);
$count += strlen($chunk);

echo $chunk;
}

$pos += $len;
}
while (!empty($chunk));

header('Content-Disposition: attachment; filename="'. $filename .'"');
header('Content-Type: application/octet-stream');
header('Content-Length: ' . $count);

$response['status'] = "success";

echo json_encode($response);

break;
}

0

Решение

Вы можете закодировать ваш файл в base64 и создать объект File, используя JavaScript.

Я не рекомендовал бы это для больших файлов!

Альтернатива:

Сохраните ваш файл на сервере, и вы можете просто получить местоположение файла и перенаправить с помощью location.href в обратном вызове Ajax.

Вы можете декодировать base64 используя atob() и создать типизированный массив. обратитесь к следующему ссылка на сайт для создания Бинарный объект на стороне клиента. Вы создаете типизированный массив как ответили Вот.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]