У меня есть база данных, в которой хранятся все сообщения электронной почты в необработанном режиме.
Я извлекаю данные с помощью хорошей библиотеки https://github.com/php-mime-mail-parser/php-mime-mail-parser, в частности вложений.
Теперь, со страницы html у меня есть:
$.ajax({
async: false,
type: "POST",
url: "/mail/get/attachment",
data: {
'idMail' : idMail,
'filename' : filename
},
success: function(data){
cl(data);
},
error: function(data){
}
}).done(function (data) {
});
это вызов моего метода php:
$parser = new PhpMimeMailParser\Parser();
$parser->setText($mail['rawContent']);
$attachments = $parser->getAttachments();
foreach ($attachments as $attachment) {
if ($attachment->getFilename() == $filename){
$file = $attachment->getContent();
$size = strlen($file);
@ob_start('');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Type: application/download');
header('Content-Description: File Transfer');
header('Content-Transfer-Encoding', 'binary');
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
header('Content-Length: '.$size);
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
ob_clean();
flush();
readfile($file);
As Судя по ответу, все кажется правильным, но ответа нет.
Размер вложения правильный ... У меня есть только строка для его вычисления. Я не хочу загружать в файловую систему.
Если я изменю клиентский запрос ajax с «asyn c: false» на «asyn c: true», chrome консоль выдает мне ошибку «net :: ERR_CONTENT_LENGTH_MISMATCH».
Где я ошибаюсь?
Я не хочу доходить до того, что чтобы каждый раз загружать сообщения на сервер, а затем использовать простой URL-адрес для их восстановления, поскольку у меня уже есть все в базе данных.
Какое решение я могу использовать?
Спасибо!
## UPDATE
ob_clean();
echo $file;
flush();
Эта процедура возвращает это в консоли, но загрузка не начинается.