所以我试图通过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?
答案 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! -该语句只是将散列的随机数令牌传递给脚本,以确保没有重复/丢失的请求没有顺序-等等...