이제 폴더를 Chrome으로 드래그 앤 드롭할 수 있습니다

웹 앱이 발전함에 따라 사용자가 데스크톱에서 브라우저로 파일을 드래그 앤 드롭하여 수정, 업로드, 공유하는 것이 편리할 수 있습니다. 하지만 안타깝게도 폴더를 웹페이지로 드래그 앤 드롭할 수는 없었습니다. 다행히 Chrome 21부터 이 문제가 해결됩니다 (이미 Chrome 개발자 채널에서 사용 가능).

드래그 앤 드롭으로 여러 파일 전달

기존 드래그 앤 드롭의 코드 샘플을 살펴보겠습니다.

<div id="dropzone"></div>
var dropzone = document.getElementById('dropzone');
dropzone.ondrop = function(e) {
    var length = e.dataTransfer.files.length;
    for (var i = 0; i < length; i++) {
    var file = e.dataTransfer.files[i];
    ... // do whatever you want
    }
};

이 예에서는 실제로 데스크톱에서 브라우저로 파일을 드래그 앤 드롭할 수 있지만 폴더를 전달하려고 하면 폴더가 거부되거나 File 객체로 취급되어 실패하게 됩니다.

삭제된 폴더를 처리하는 방법

Chrome 21에서는 폴더 또는 여러 개의 폴더를 브라우저 창에 드롭할 수 있습니다. 이를 처리하려면 드롭된 객체를 처리하는 방식을 변경해야 합니다.

<div id="dropzone"></div>
var dropzone = document.getElementById('dropzone');
dropzone.ondrop = function(e) {
    var length = e.dataTransfer.items.length;
    for (var i = 0; i < length; i++) {
    var entry = e.dataTransfer.items[i].webkitGetAsEntry();
    if (entry.isFile) {
        ... // do whatever you want
    } else if (entry.isDirectory) {
        ... // do whatever you want
    }
    }
};

여기서 큰 차이점은 getAsEntry (webkitGetAsEntry)라는 새 함수를 사용하여 드롭된 객체를 Entry (FileEntry 또는 DirectoryEntry)로 취급할 수 있다는 점입니다. Entry 객체에 대한 액세스 권한을 얻은 후 FileSystem API 사양에서 도입된 표준 파일 처리 메서드를 사용할 수 있습니다. 예를 들어 이 예에서는 .isFile (또는 .isDirectory) 필드를 검사하여 드롭된 객체가 파일인지 디렉터리인지 감지하는 방법을 보여줍니다.

FileSystem API에 관한 자세한 내용은 FileSystem API 살펴보기를 참고하고, 새로운 드래그 앤 드롭 기능에 관한 자세한 내용은 이 문서를 참고하세요. 물론 이러한 기능은 개방형 표준이거나 곧 표준이 될 예정입니다.