PHP - После расшифровки, как я могу предложить пользователю опцию ОТКРЫТЬ / СОХРАНИТЬ файл из браузера без необходимости сначала сохранять файл? - PullRequest
0 голосов
/ 21 февраля 2020

Итак, у меня есть небольшое тестовое приложение, в которое пользователь может загрузить файл (docx, png, jpg и несколько других). Файл зашифрован и сохранен в папке. Запись в таблице БД создается с UID пользователя и именем файла, например,

AA1234   Image100.jpg
BB2345   WorkDoc.Doc

Это прекрасно работает, файл зашифрован и сохранен, а таблица содержит информацию.

Кому скачав сохраненный зашифрованный файл, пользователю предоставляется выбор / опция из списка файлов, применимых к ним (например, Image100.jpg, AA1234). После отправки инструмент должен затем загрузить файл, расшифровать его и открыть окно, чтобы позволить пользователю ОТКРЫТЬ / СОХРАНИТЬ файл

Моя проблема в том, что, хотя это работает, это не так аккуратно, как хотелось бы , Код загружает файл, расшифровывает его, сохраняет его как расшифрованный временный файл , а затем предлагает пользователю окно ОТКРЫТЬ / СОХРАНИТЬ на основе этого временного сохраненного файла, как показано ниже. (затем удаляет этот временный, дешифрованный файл после).

include('./lib/key.php');

//Get the filename and prepend the folder where the encrypted files are saved
$file = ('encuploads/'.$_POST["fileToDownload"]);

//Read the file and convert it to a string variable
$DocumentString = file_get_contents($file);

//Decrypt the file
$decryption=openssl_decrypt ($DocumentString, $ciphering, $key, $options, $iv); 

//Create a new temporary file containing the decrypted info
$decrypt = 'decrypted'.basename($_POST["fileToDownload"]);
$downloadfile = 'encuploads/'.$decrypt;
file_put_contents($downloadfile, $decryption);

//change the headers to output to a "download/save" window for the user
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header("Content-Disposition: attachment; filename=\"" . ($_POST["fileToDownload"]) . "\";");
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($downloadfile));
ob_clean();
flush();
readfile($downloadfile); //showing the path to the server where the file is to be download

//delete the temporary file.
unlink(realpath($downloadfile))

Поэтому вместо сохранения временного дешифрованного файла - "file_put_contents($downloadfile, $decryption);" и последующего чтения с установленными заголовками "readfile($downloadfile);" Я хотел бы получить возможность использовать прямую переменную $ decryption после операторов заголовка

, таких как echo $decryption с заголовками, установленными таким образом, чтобы предоставить пользователю те же параметры OPEN / SAVE (для выбранного типа файла)

Любая идея, если это допустимая опция или любой другой аккуратный способ дать пользователю возможность загрузки после дешифрования (я не хочу вариант <a href="decryptedfilehere">DOWNLOAD</a> ... Я хотел бы всплывающее окно)

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...