Javascript 从剪贴板复制和粘贴图像,blob错误

Javascript 从剪贴板复制和粘贴图像,blob错误,javascript,jquery,html,clipboard,Javascript,Jquery,Html,Clipboard,我试图从剪贴板复制和粘贴图像,但在chrome中收到此错误消息。怎么了 错误 JS $(函数(){ $(“主体”).bind(“粘贴”,函数(ev){ var$this=$(this); var原始=ev原始事件; var file=original.clipboardData.items[0].getAsFile(); var reader=new FileReader(); reader.onload=函数(evt){ var结果=evt.target.result; var arr=结果

我试图从剪贴板复制和粘贴图像,但在chrome中收到此错误消息。怎么了

错误

JS

$(函数(){
$(“主体”).bind(“粘贴”,函数(ev){
var$this=$(this);
var原始=ev原始事件;
var file=original.clipboardData.items[0].getAsFile();
var reader=new FileReader();
reader.onload=函数(evt){
var结果=evt.target.result;
var arr=结果分割(“,”);
var data=arr[1];//原始base64
var contentType=arr[0]。拆分(“;”[0]。拆分(“:”[1];
//这需要发送到可以接受原始base64内容并保存到文件的服务器路由
$.post(“/echo/html/”{
contentType:contentType,
数据:数据
});                                
$this.追加(“”);
};
reader.readAsDataURL(文件);
});        
}); 

问题在于,当浏览器试图通过剪贴板加载文件时,它正在查找blob类型的数据

Blob,或B首先LargeOBobject是一个很长的字符串,它是您的对象,但它不是一个文件,而是一个字符串

通过尝试从剪贴板(其中有文件目录的副本)进行复制,至少从错误的方式和代码的方式来看,这就是它的外观,它不是blob文件类型,因此Chrome没有设置为处理实际文件

我不知道这是为了什么,但是如果您试图将文件保存在数据库中,那么您应该做的是通过表单上传图像,将其放置在具有唯一名称的目录中,并将每个图像的位置、实际路径存储在数据库中

然后,您可以循环使用它并执行您需要执行的操作

如果你愿意,我会发布一些我从另一个项目中得到的代码,在那里我做了这件事,所以只要问问你是否需要它

只有当您使用MySQL服务器tho时,它才会起作用;代码是用PHP编写的


谢谢,这也是我正在努力解决的问题。我使用FileReader让用户在表单中添加一张图片,并在上传之前能够看到它。如果我把它保存到数据库中,那就无法让他们在上传之前预览它。你认为我应该改用Ajax,还是可以接受使用Ajax进行预览?@gv0029预览图像是绝对必要的吗?如果不是,而且您只使用一个普通的mysql数据库,我将非常愿意与您分享代码。预览只是让事情复杂化,所以如果不是绝对必要的话,那么一切都会简单得多。谢谢,不幸的是,是的,这是他们非常关注的事情。尽管如此,我还是很感激!
Uncaught TypeError: Failed to execute 'readAsDataURL' on 'FileReader': The argument is not a Blob. 
 $(function() {
$("body").bind("paste", function(ev) {
    var $this = $(this);
    var original =  ev.originalEvent;
    var file =  original.clipboardData.items[0].getAsFile();
    var reader = new FileReader();
    reader.onload = function (evt) {
        var result = evt.target.result; 
        var arr = result.split(",");
        var data = arr[1]; // raw base64
        var contentType = arr[0].split(";")[0].split(":")[1];

        // this needs to post to a server route that can accept raw base64 content and save to a file            
        $.post("/echo/html/", {
            contentType: contentType,
            data: data
        });                                
        $this.append("<img src='" + result + "' />");
    };

    reader.readAsDataURL(file);
    });        
});