2011-03-23 11 views
5

Tengo una aplicación que almacena archivos y usa arrastrar y soltar para subirlos. ¿Hay alguna manera de arrastrar y soltar para descargar el archivo a mi escritorio en lugar de tener que hacer clic en "descargar". Básicamente, lo opuesto a la carga de arrastrar y soltar.¿Es posible arrastrar y soltar un archivo del navegador al escritorio, causando una descarga?

+0

Si eso fuera posible, me imagino que tendrías que escribir una extensión de navegador. –

+0

En realidad, es posible con Chrome: http://www.thecssninja.com/javascript/gmail-dragout – raymi

Respuesta

1

No, necesitaría poder establecer una ruta de descarga, si nada más, que ningún explorador le permite hacer. Es posible con un complemento, pero no JS directo.

+0

Pregunta de seguimiento: ¿sugeriría un complemento de navegador para lograr esto, lo que significa que tendría que crear un complemento para cada navegador? o algún tipo de integración de escritorio? –

+0

No recomendaría intentarlo, para ser honesto. Es un comportamiento no estándar y nadie lo intentará a menos que les dé instrucciones. Sí, necesitaría un complemento diferente en cada navegador. –

+0

Falso: es (ahora) posible hacer esto. Chrome tiene un método (ver la respuesta a continuación) y parece que Firefox requiere una extensión (http://superuser.com/questions/758797/downloading-files-with-drag-and-drop) – Abacus

2

Solo es compatible con Google Chrome.
http://www.html5rocks.com/en/tutorials/dnd/basics/#toc-desktop-dnd-out Por ejemplo, está implementado en Gmail.

Ninguno de los navegadores cumple este comportamiento.

+0

Demostración de http://www.thecssninja.com/javascript/gmail-dragout funciona al menos en Firefox 31.4 en Linux . –

+0

Hay mucho que leer y ordenar en los tutoriales: aquí está el código mínimo viable para demostrar cómo funciona esto: Drag Me Abacus

0

Los html5rocks y cssninja están bien, pero creo que son excesivos para las respuestas rápidas. Aquí hay un ejemplo simple de usar eventos de arrastrar de algo, incluso para descargar archivos.

<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> 

Advertencia: Si bien esto funcionó bien para mí en Chrome localmente (en Windows 7), cuando traté de ponerlo en jsFiddle para un Linke, el "Descargar estático" no funcionó, y el "URL de descarga" se estrelló Google Chrome.

Como con la mayoría de arrastrar y soltar, no funciona con MSIE 9, no he probado 10+ o Firefox.

Cuestiones relacionadas