[AJAX] upload ajax avec des fichier compressé..
Bonjour tout le monde.
Je travaille sur un projet en php Symfony, dans un de mes pages, j'ai créé un ajax upload qui charge des fichiers compressés (extension .zip). L'upload fonctionne parfaitement, le fichier zipé se copie dans le répertoire correspondant, et après je dois l'unzipper dans le classe d'actions de php mais il y a toujours un problème = echec de décomprsssion.
Je n'arrive pas à découvrir où exactement ça foire.
Voilà le code de la page où je créé l'upload ajax :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
<script type="text/javascript">
$(document).ready(function()
{
//fonction de pause pour donner le temps de chargement du zip
function pause(millis)
{
var date = new Date();
var curDate = null;
do { curDate = new Date(); }
while(curDate-date < millis)
}
//C le bouton de chargement de l'arborescence
new AjaxUpload('#button',
{
action: '<?php echo url_for('@upload');?>',
name: 'userfile',
onSubmit : function(file , ext)
{
if (! (ext && /^(zip)$/i.test(ext)))
{
// extension is not allowed
alert('Error: invalid file extension');
// cancel upload
return false;
}
else
{
//var adrs = $('#adr').val();
//alert(adrs)
//DisplayTr(adrs);
$('#filename').val(file);
$('#buttonValid').removeAttr('disabled');
pause('500');
$.ajax({
type: "POST",
url: '<?php echo url_for('template/viewtmpl'); ?>',
data: 'file='+file,
success: function(result){
DisplayTr(result);
}
});
}
}
});
//le window de montrer l'arborescence
messageObj = new DHTML_modalMessage(); // We only create one object of this class
messageObj.setShadowOffset(5); // Large shadow
function DisplayTr(code)
{
messageObj.setHtmlContent(code);
messageObj.setCssClassMessageBox(false);
messageObj.setSize(300,500);
messageObj.setShadowDivVisible(true); // Enable shadow for these boxes
messageObj.display();
}
function closeTr()
{
messageObj.close();
}
});
function changeForm()
{
$('#tree').hide();
$('#infos').show();
}
</script>
<div id="cont_frm">
<form action="#" method="post" enctype="multipart/form-data">
<h1>Nouveau Template</h1>
<hr />
<div id="tree" style="display:block">
<table align="center" border=0>
<tr>
<td>
<label id="labelfile">Pour pouvoir charger votre arborescence, elle doit etre sous forme d'un fichier zip.<br></label>
</td>
</tr>
<tr>
<td>
<input id="button" type="button" value="Parcourir..."/>
<input id="buttonValid" type="button" value="Valider" onclick="changeForm()" disabled="true" />
</td>
</tr>
<tr>
<td>
<input type="hidden" name="filename" id="filename" value="" />
</td>
</tr>
</table>
</div>
<div id="infos" style="display:none">
<table align="center" border=0>
<tbody>
<?php echo $tmpl; ?>
</tbody>
</table>
<hr />
<table align="center" border=0>
<tr>
<td colspan="4">
<input type="submit" value="Enregistrer" />
<input type="reset" value="Annuler" />
</td>
</tr>
</table>
</div>
</form>
</div> |
Avec cet upload, il y a un autre formulaire, c'est pas ça le problème du tout.
Voilà le code de la classe actions.class.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
//fonction de l upload du tree zipé dans le répertoire d upload
public function executeUpload(sfWebRequest $request)
{
foreach($_FILES as $fichier)
{
$this->fileName = $fichier['name'];
$this->target = sfConfig::get('sf_upload_dir').'/'.$this->fileName;
move_uploaded_file($fichier['tmp_name'], $this->target);
exec('chmod 777 '.$this->target);
}
}
//fonction qui affiche le tree de template contenu dans le fichier zipé
public function executeViewtmpl(sfWebRequest $request)
{
if ($this->getRequest()->getMethod() == sfRequest::POST)
{
$this->file = $request->getParameter('file');
$this->path = sfConfig::get('sf_upload_dir').'/'.$this->file;
//vider le contenu du répertoire de décompression IMPORTANT!!!
exec('rm -rf '.sfConfig::get('sf_upload_dir').'/template/*');
$this->zip = new ZipArchive();
// On vérifie l'ouverture de l'archive
if($this->zip->open($this->path!== TRUE))
{
die("Echec lors de l'ouverture de l'archive");
}
//extraction
$this->zip->extractTo(sfConfig::get('sf_upload_dir').'/template/') or die("Erreur rencontrée lors de l'extraction de l'archive");
//fermeture de l'archive
$this->zip->close() or die("Erreur lors de la fermeture de l'archive");
//exec('rm -rf '.$this->path);
}
} |
Si qulequ'un a n'importe quelle idée, qu'il me le propose s'il vous plait, je suis liée par un délai :cry:
Merci..