2010-03-05 3 views
6

Я изучаю веб-фреймворк/техно, который позволяет перетаскивать n файлов с файловой системы в веб-приложение. Конечно, целью является загрузка этих файлов на сервер приложений.Перетащите n из файловой системы в веб-приложение

В Flex это кажется невозможным (хотя оно работает с AIR). Я нашел способ с Google Gears, но это заставляет пользователя устанавливать Gears в качестве плагина для браузера.

С помощью апплета Java это кажется возможным, но для этого требуется, чтобы пользователь принял исключение правила безопасности ... (это странно для меня, поскольку чтение файла, указанного пользователем через DnD, не является «менее безопасным», чем если бы пользователь указал файл через стандартное классическое диалоговое окно загрузки ...).

Есть ли какой-либо неинтрузивный способ разрешить эту функцию, без установки какого-либо плагина и без принятия предупреждения?

+0

Я подтверждаю, что через три года, чтобы создать резервную копию флеш-загрузчика, нам все равно нужно использовать AIR для перетаскивания файлов. Я искал решение AS3 без везения. Надеюсь, HTML5 станет более распространенным, так как начнется 2013 год. –

ответ

4

No.

Браузеры как правило, не имеют поддержки такого рода вещи, построенный в.

+2

Кроме того, я бы избегал Gears. Google отбрасывает его в пользу встроенных функций HTML 5. http://www.readwriteweb.com/archives/google_dumps_gears_for_html5.php – NotMe

4

Firefox 3.6 и, видимо, последняя Safari (Webkit, возможно, по ночам) поддерживают это через HTML5. Я недавно общался с ним, и он работает очень хорошо. Пример, который я сделал, просто вставляет миниатюры в страницу, но это можно настроить для загрузки данных на сервер. Вот/JQuery код JavaScript Я написал, не стесняйтесь использовать это:

function debug(string) { 
    $("#debugArea").append(string); 
} 

$(function() { 
    // We need to override the dragover event, otherwise Firefox will just open the file on drop 
    $("#dropArea").bind("dragover", function(event) { 
    event.preventDefault(); 
    }); 

    // This is where the actual magic happens :) 
    $("#dropArea").bind("drop", function(event) { 
    event.preventDefault(); 
    debug("Dropped something: "); 
    // Since jquery returns its own event object, we need to get the original one in order to access the files 
    var files = event.originalEvent.dataTransfer.files; 
    // jquery nicely loops for us over the files 
    $(files).each(function(index, file) { 
    if(!file.type.match(/image.*/)) { // Skip non-images 
     debug(file.name) 
     debug(" <em>not an image, skipping</em>; "); 
     return; 
     } 

     // We need a new filereader for every file, otherwise the reading might be canceled by the next file 
     var filereader = new FileReader(); 
     filereader.onloadend = function(event) { $("#thumbnails").append("<img src='"+event.target.result+"' width='100px' />"); }; 
     debug(file.name); 
     debug("; "); 

     // Read the file in data URL format so that we can easily add it to an img tag. 
     filereader.readAsDataURL(file); 
    }); 
    debug("<br/><br/>"); 
    }) 

}); 

И в HTML для этого:

<div id="dropArea"> 
    <p>Drop images here!</p> 
</div> 
<div id="thumbnails"> 
</div> 
<div id="debugArea"> 
    <strong>Debug Info:</strong><br/> 
</div> 
+0

Мне очень нравится этот код. Даже если он краток, он отвечает на множество проблем, связанных с загрузкой файлов, и помогает создавать простые функции для загрузки и получения миниатюр вместо поиска существующего кода и фрагментов. BTW, чтение файлов в URI с помощью filereader также позволяет применять шифрование к файлам, а затем отправлять их в виде двоичных данных в скрипт. –

0

Это стало возможным благодаря использованию HTML5 File API.

Это возможно даже drag & drop folders.