通过ajax发送blob数据

时间:2015-06-06 19:39:11

标签: javascript ajax blob

所以我试图通过ajax作为blob发送图像。 blob具有正确的类型,大小约为4.5 kb。我试着这样发送:

document.getElementById("canvas").toBlob(function (blob) {
    var data = new FormData();
    data.append('name', name);
    data.append('program', YouTomaton.Main.get_CurrentProgram());
    data.append('image', blob);
    $.ajax({
        type: "Post",
        url: "save.php",
        data: data,
        processData: false,
        contentType: false,
        success: function (result) {
            if(result != undefined && result.length > 0)
                alert(result);
        }
    });
});

接收页面如下所示:

<?php
include("session.php");
writeProgram($_POST['name'], $_POST['program'], $_POST['image']);
?>
它告诉我指数&#39;图像&#39;无法找到。因此,不仅不会发送数据,甚至省略了索引。我做错了什么?

编辑:toBlob和toDataURL都不会生成除空PNG之外的任何内容。有没有办法将数据从帧缓冲区转换为base64编码的jpg或png?

2 个答案:

答案 0 :(得分:1)

阅读this。然后想想你想做什么。

如果你可以使用jQuery的插件。我建议使用FileUpload

对于HTML文件输入,最小语法如下:

<input type="file" name="fs" id="fileupload" />

和JS脚本:

$('#fileupload').fileupload({
                url: "fileupload?additional=data",
                done: function (e, data) {
                    console.log(data.result);
                }
            }).prop('disabled', !$.support.fileInput)
                .parent().addClass($.support.fileInput ? undefined : 'disabled');

答案 1 :(得分:0)

我现在正在处理类似的问题-我使用的是PDF-这是我正在使用的ajax调用:

$.ajax({
            dataType: "native",
            url: ("handle.php?filename=" + event.target.dataset.name),
            xhrFields: { responseType: "blob" },
            data: "secure=<?php echo $pass ?>",
            success: function(result){
                    console.log(result.size)
                    download(result, event.target.dataset.name, "application/pdf")
            }
        })

download()部分是对FileSaver工具的调用-在我的情况下,这是Blob在客户端保存的方式...

我在标记中使用数据名称attr来存储文件名(不是完整路径)-希望对您有所帮助!

编辑::很抱歉加入PHP! -该语句只是将散列的随机数令牌传递给脚本,以确保没有重复/丢失的请求没有顺序-等等...