【发布时间】:2017-11-06 14:13:33
【问题描述】:
似乎有很多关于此的帖子,但在其中找不到解决方案,我遇到了难题。帮助,亲爱的堆垛机!
我正在编写一些代码,让用户可以选择个人资料图片,对其进行裁剪,然后将裁剪后的图像保存在服务器上。我正在使用 Cropper.js 库来处理实际的裁剪并确定它正在工作,因为我可以使用以下代码实时显示裁剪:
var imageData = cropper.getCroppedCanvas().toDataURL();
var profileimage = document.getElementById('myProfilePhoto');
profileimage.src = imageData;
现在我想将裁剪后的图像发送到服务器,最好的方法似乎是创建一个 blob 和 Ajax,然后将其交给一个 php 脚本来处理它。
cropper.getCroppedCanvas().toBlob(function (blob) {
var formData = new FormData();
formData.append('file', blob);
formData.append('uuid', '{a unique identifier}');
$.ajax({
type: 'POST',
url: '{the php script}',
data: formData,
processData: false,
contentType: false,
success: function (response) {
console.log('Upload success: '+response);
},
error: function () {
console.log('Upload error');
}
});
});
在这个阶段,我只是将我的 php 脚本放到 var_dump($_REQUEST) 中,这样我就可以在控制台中看到脚本认为它得到了什么。但是,响应只是发回默认的 $_REQUEST 对象,如 PHPSESSID,没有文件或 uuid 输入。
我做错了什么?
提前感谢您的任何指点。
【问题讨论】:
-
你在哪里定义
blob?uuid是否在您的 PHP 代码中被正确检索? -
blob是回调参数。在发送请求之前,javascript 端的控制台中没有任何错误吗?如果画布被非 CORS 绘图污染,toDataURL或toBlob函数会抛出错误。请参阅CORS anabled image 了解更多信息 -
如果 value 是 Blob 对象而不是 File 对象,则将 value 设置为新的 File 对象,表示相同的字节,其 name 属性值为“blob”。
-
抱歉,我错过了您在回调中运行第二个 sn-p 的事实。
-
所以当您执行
console.log(blob)时,您会看到blob 吗?当你查看网络请求时,你看到了吗?
标签: javascript jquery ajax form-data cropperjs