Можно ли перетащить файл из браузера на рабочий стол, вызвав загрузку?


У меня есть приложение, которое хранит файлы и использует перетаскивание для их загрузки. Есть ли способ перетащить+падение, чтобы загрузить файл на свой рабочий стол вместо того, чтобы нажимать "загрузить". В принципе, противоположность загрузке перетаскиванием+ перетаскиванием.

Author: ThiefMaster, 2011-03-23

3 answers

Нет, вам нужно будет иметь возможность задать путь загрузки, если ничего другого, что не позволяют вам делать никакие браузеры. Это возможно с помощью плагина, но не прямого JS.

 1
Author: Mark Kahn, 2011-03-23 21:07:11

Он поддерживается только в Google Chrome.
http://www.html5rocks.com/en/tutorials/dnd/basics/#toc-desktop-dnd-out Например, это реализовано в Gmail.

Ни один из других браузеров не поддерживает такое поведение.

 2
Author: IT Hit WebDAV, 2013-04-23 00:53:24

Html5rocks и cssninja в порядке, но я думаю, что это перебор для быстрых ответов. Вот простой пример использования событий перетаскивания из чего-либо, в том числе для загрузки файлов.

<style>
div { background-color: #eee; border: 1px solid black; padding: 5px; float: left; clear: both; }
</style>
<div id="uiLinkText"           draggable="true">Drag <b>Text</b> to a text editor </div>
<div id="uiLinkHyperlink"      draggable="true">Drag <b>Hyperlink</b> to address bar </div>
<div id="uiLinkUrlDownload"    draggable="true">Drag <b>Url Download</b> to file system </div>
<div id="uiLinkStaticDownload" draggable="true">Drag <b>Static Download</b> to file system </div>
<script>
document.getElementById('uiLinkText').ondragstart = function(event){
  // plain text, for dropping into text editor
  event.dataTransfer.setData('text/plain', 'Go to http://stackoverflow.com/questions/5411481/ to read about this.');
}
document.getElementById('uiLinkHyperlink').ondragstart = function(event){
  // URL, for dropping into the browser's address bar
  event.dataTransfer.setData('text/uri-list', 'http://stackoverflow.com/questions/5411481/');
}
document.getElementById('uiLinkUrlDownload').ondragstart = function(event){
  // file download contents, for dropping into a file system
  event.dataTransfer.setData('DownloadURL', 'text/plain:SourceQuestion.html:http://stackoverflow.com/questions/5411481/')
}
document.getElementById('uiLinkStaticDownload').ondragstart = function(event){
  var textToWrite = 'file contents here';
  var textFileAsBlob = new Blob([textToWrite], { type: 'text/xml' });
  var url = window.URL.createObjectURL(textFileAsBlob);
  // file download contents, for dropping into a file system
  event.dataTransfer.setData('DownloadURL', 'text/plain:Static.txt:' + url)
}
</script>

Предупреждение: Хотя это отлично работало для меня в Chrome локально (в Windows 7), когда я попытался поместить его в jsfiddle для ссылки, "Статическая загрузка" не сработала, а "Загрузка Url" привела к сбою Google Chrome.

Как и в большинстве случаев перетаскивания, он не работает с MSIE 9, я не пробовал 10+ или Firefox.

 0
Author: Abacus, 2015-07-17 18:55:11