Blob损坏的数据

时间:2016-06-12 12:27:36

标签: javascript php jquery

我是法国人,抱歉我的英语很差......

我正在尝试将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;
}

您对解决方案有任何想法。

由于

0 个答案:

没有答案