如何通过AJAX和PHP解码和上传GIF

时间:2017-10-04 04:44:08

标签: javascript php jquery ajax

我目前正在使用Gifshot.js在我的网站上创建用户头像。我希望能够存储GIF文件服务器端,但我无法让它工作。问题是我如何正确解码base64编码的GIF文件,通过PHP存储?另外,有没有办法将文件上传为增量数字而不是静态名称?这是我目前的代码:

使用Javascript:

$("#savegif").click(function(){      
    gifshot.createGIF({
        interval: 0.1,
        numFrames: 25,
    }, function (obj) {
        if (!obj.error) {

            var image = obj.image,
            animatedImage = document.getElementById('animatedgif');
            animatedImage.src = image;

            var data = animatedImage.src;
            $.ajax({ 
                url: "gifsave.php",
                method: "POST",
                dataType: "text",
                data: { data }
            });
        }
    });
});

PHP:

$file = $_POST['data'];
$img = str_replace('data:image/gif;base64,', '', $file);
file_put_contents('images/image.gif', base64_decode($img));

1 个答案:

答案 0 :(得分:1)

您可POST Blob表示服务器的文件对象,并使用php://inputfopen()获取php的文件内容,请参阅{{ 3}}。

fetch("gifsave.php", {method:"POST", body:blob})
.then(response => response.ok)
.then(res => console.log(res))
.catch(err => console.error(err));

您可以将文件作为块传输到服务器,方法是将Blob转换为ArrayBuffer,创建TypedArray,例如Uint8Array,{{1} }}作为参数,并使用ArrayBuffer将文件流式传输到服务器。