2014-04-15 2 views
2

클립 보드에서 이미지를 복사하여 붙여 넣으려고하는데 크롬에서이 오류 메시지가 나타납니다. 뭐가 잘못 되었 니?클립 보드에서 이미지 복사 및 붙여 넣기, blob 오류

js fiddle

오류

Uncaught TypeError: Failed to execute 'readAsDataURL' on 'FileReader': The argument is not a Blob. 

JS

$(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); 
    });   
}); 

답변

1

당신하고 발생한 문제는 브라우저가 클립 보드를 통해 파일을로드 할 때, 그것은을 찾고 있다는 것이다 블롭 유형의 데이터.

의 Blob, 또는 B inary L ARGE OB ject는 개체, 대신 파일 인이다 긴 문자열, 그냥 문자열입니다.

파일의 디렉토리 복사본이있는 클립 보드에서 오류가 발생한 방법과 코드가 어떻게 생겼는지에 따라 복사하는 것이 BLOB 파일 형식이 아닙니다 , Chrome은 실제 파일을 처리하도록 설정되지 않습니다.

이것이 무엇인지 모르겠지만 데이터베이스에 파일을 저장하려는 경우 이미지를 양식을 통해 업로드 한 다음 고유 한 이름을 지정하고 각 이미지의 위치, 실제 경로를 데이터베이스에 저장하십시오.

그런 다음 루프를 반복하고 수행해야 할 작업을 수행 할 수 있습니다.

원하는 경우 다른 프로젝트에서 내가 작성한 일부 코드를 게시합니다.이 코드는 원하는지 물어 봅니다.

MySQL 서버를 사용하는 경우에만 작동합니다. 코드는 PHP로 작성되었습니다.

Blob Wiki Article

+0

고마워요, 이것 역시 제가 알아 내려고하는 것입니다. 저는 FileReader를 사용하여 사용자가 그림을 양식에 추가하고 업로드하기 전에이를 볼 수있게했습니다. 데이터베이스에 저장하면 업로드하기 전에 미리 볼 수 있도록하는 목적을 상실합니다. 나는 Ajax를 대신 사용해보아야한다고 생각 하는가? 아니면 미리보기를 허용하기 위해 Ajax를 사용하는 것이 허용 가능한가? – mario

+1

@ gv0029 이미지를 미리 볼 필요가 있습니까? 그렇지 않고 일반 mysql 데이터베이스 만 사용하고 있다면 코드를 공유 할 의향이 있습니다. 미리보기는 일을 복잡하게하므로 절대적으로 필요한 것이 아니라면 모든 것이 훨씬 쉽습니다. – copilot0910

+1

감사합니다. 불행히도 예, 그렇습니다. 나는 그것을 모두 똑같이 고맙다! – mario

관련 문제