Enregistrer le fichier sur le PC local à l’aide des en-têtes PHP

Je développe un éditeur SVG. Je dois enregistrer l’image svg sur le disque local. Comme vous le savez, pour des raisons de sécurité, il est impossible de le faire directement avec JavaScript. J’ai donc décidé d’approcher le problème avec l’aide côté serveur. J’ai écrit la routine PHP suivante dans un fichier appelé “savefile.php“:

 'application/vnd.ms-excel', 'xml' => 'application/xml', 'html' => 'text/html', 'cvs' => 'text/plain', 'svg' => 'text/plain', 'txt' => 'text/plain', 'json' => 'text/plain', 'array' => 'text/plain'); if (isset($_POST['format']) && isset($_POST['filename']) && isset($_POST['content'])) { $filename = $_POST['filename']; $format = $_POST['format']; $content = $_POST['content']; $fullName = $filename . '.' . $format; header('Pragma: public'); header("Content-Description: File Transfer"); header("Content-Transfer-Encoding: binary"); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header("Cache-Control: public"); header('Content-Type: ' . $mime[$format]); header('Content-Disposition: attachment; filename="' . basename($fullName) . '"'); echo $content; } ?> 

Du côté du serveur, j’appelle la procédure PHP avec ce code:

  var obj = { format: 'svg', filename: 'myfilename', content: glb.Draw_active().GetDisegno().svg() }; $.post("php/savefile.php",obj,function(data,status,xhr){console.log('Executed');}); 

Lorsque le logiciel exécute le code ci-dessus, le navigateur doit ouvrir la fenêtre des fichiers de sauvegarde et attendre la confirmation de l’utilisateur ….. mais rien ne se passe. Je suis sûr que la routine PHP est exécutée, il est également exécuté la routine de rappel, mais rien d’autre. Quelque chose ne va pas, mon suspect est sur le code côté client javascript, mais je ne suis pas en mesure de trouver de la documentation. Peut-être que quelqu’un a de l’expérience sur cette procédure?

Merci beaucoup.

Merci à @Quentin pour l’aide que j’ai résolue. Le code PHP ci-dessus fonctionne, je devais changer la partie Javascript. Voici le code de travail:

La routine SaveFile:

 /* @datatype : 'svg', 'xml', 'txt', 'xls', 'csv', 'html', etc see the list in PHP file @filename : filename without extension @exportServer : name of the PHP file on the server @content : content of the file to save */ var saveFile = function(datatype, filename, exportServer,content){ var HInput = function(value, name, form) { var I = document.createElement('input'); I.name = name; I.value = value; I.type = 'hidden'; form.appendChild(I); }, HTextArea = function(value, name, form) { var tA = document.createElement('textarea'); tA.name = name; tA.value = value; form.appendChild(tA); }; var form = document.createElement('form'); HInput(filename, 'filename', form); HInput(format, 'format', form); HTextArea(content, 'content', form); form.action = exportServer; form.method = 'post'; document.body.appendChild(form); form.submit(); document.body.removeChild(form); } 

…. pour mon besoin je l’appelle de cette façon:

 saveFile('svg','myfilename',"php/savefile.php",data); 

c’est tout…… 😉