我是法国人,抱歉我的英语很差......
我正在尝试将2个文件发送到PHP脚本(json数据和JPG图片)。 PHP脚本使用这两个文件和服务器端的其他文件创建一个存档“.tar.gz”或简单的.tar,然后将存档发送给客户端。
在客户端,当我尝试保存存档文件(使用FileSaver lib)时,存档已损坏。我试图用wireshark监视HTTP响应并提取存档,文件是正确的。所以问题出在Javscript脚本中:
HTML部分:
<div class="col-sm-1" >
<button type="button" class="btn btn-default" id="button_distrib" onclick="toggle_distribe()">Distribuer</button>
<div id="input_open_image" class="hidden">
<form method="post" id="fileinfoimage" onsubmit="return submitFormImage();">
<p class="btn btn-default">Photo de présentation:<input type="file" name="uploadFileImage" class="btn btn-default"/></p>
<input type="submit" value="Télécharger" name="submit" class="btn btn-default"/>
</form>
</div>
</div>
PHP脚本:
<?php
$file = '/tmp/cv.tar';
$json = '/tmp/json';
try {
$a = new PharData($file);
file_put_contents ($json, $_POST['json']);
$a->addFile('cv.html', 'cv/cv.html');
$a->addFile('js/cv.js', 'cv/js/cv.js');
$a->addFile('js/cv.js', 'cv/js/cv.js');
$a->addFile('js/bootstrap.min.js', 'cv/js/bootstrap.min.js');
$a->addFile('js/jquery.min.js', 'cv/js/jquery.min.js');
$a->addFile('js/trianglify.min.js', 'cv/js/trianglify.min.js');
$a->addFile('js/background.js', 'cv/js/background.js');
$a->addFile('css/bootstrap.min.css', 'cv/css/bootstrap.min.css');
$a->addFile('css/cv.css', 'cv/css/cv.css');
$a->addFile($json, 'cv/data/cv.json');
$a->addFile($_FILES['uploadFileImage']['tmp_name'], 'cv/icons/photo.jpg');
} catch (Exception $e) {
}
$filegz= $file. ".gz";
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/x-tgz');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
ob_get_clean();
echo gzcompress(readfile($file));
ob_end_flush();
unlink($file);
exit;
}
?>
Javascript部分:
function submitFormImage()
{
console.log("submit event image");
var fd = new FormData(document.getElementById("fileinfoimage"));
fd.append("json", JSON.stringify(generate()));
$.ajax({
url: "archive.php",
type: "POST",
data: fd,
processData: false,
contentType: false,
async: false
}).done(function( data ) {
alert(data.length);
var bytes = new Uint8Array(data.length);
for (var i=0; i<data.length; i++)
bytes[i] = data.charCodeAt(i);
var blob = new Blob([bytes], {type: "application/octet-stream"});
alert(blob.size);
saveAs(blob, "cv.tar");
});
return false;
}
您对解决方案有任何想法。
由于