2016-05-31 11 views
14

Sto cercando di fare in modo che un utente può trascinare un'icona dal browser web al proprio desktop, e un file di testo è creato. Ho la parte del contenuto verso il basso, ma non riesco a capire come impostare il nome del file. Ho provato a cambiare il codice dataTransfer.files ma è di sola lettura. Non sono sicuro di come farlo.trascinamento HTML/drop - come impostare il nome del file di un * in uscita * trascinamento (per desktop)

class CrashReport extends React.Component { 
    dragStart(event) { 
    const dat = {name: 'test!', crashDate: new Date()}; 

    event.dataTransfer.name = 'tmp.txt'; // bad 
    event.dataTransfer.setData('text/plain', JSON.stringify(dat, null, 2)); 
    console.log(event.dataTransfer); 
    } 

    render() { 
    return <div draggable onDragStart={this.dragStart.bind(this)}> 
     Drag This 
    </div> 
    } 
} 

http://embed.plnkr.co/ar3deFFvedcWhVfwt6c6/

+0

_ "Ho avuto la parte di contenuti verso il basso" _ Si può creare uno stacksnippets o plnkr http://plnkr.co di dimostrare? – guest271314

+0

@ guest271314 Il codice sopra fa esattamente quello (trascina/rilascia sul desktop, viene creato un file). Aggiungerò un link Plunker. – ffxsam

+1

Nessun file viene creato qui su plnkr trascinandolo sul desktop, solo quando si trascina l'elemento su plnkr su un file manager è un _link_ al file creato; vedi http://stackoverflow.com/questions/5416748/drag-a-file-from-browser-to-desktop?rq=1#comment53385290_5416795. Pur utilizzando questo approccio http://stackoverflow.com/questions/29343897/drag-file-in-data-uri-format-from-browser-to-desktop puoi impostare il link al nome del file impostando '.innerHTML' di per esempio un elemento '' che viene trascinato su file manager. – guest271314

risposta

-2

È possibile scrivere

event.dataTransfer.setData = ('text', 'tmp.txt'); 
+0

Puoi spiegare cosa intendi ... –

+0

Senza offesa per lui, ma penso che Sandip abbia bisogno di imparare JavaScript. ;) – ffxsam

+0

@ffxsam: puoi per favore farmi sapere cosa c'è di sbagliato in questo, così posso correggere il mio errore. –

2

Secondo questa MDN page (sottolineatura mia)

un file locale viene trascinato utilizzando il tipo application/x-moz-file con un data valore che è uno nsIFile oggetto. Le pagine Web non privilegiate non sono in grado di recuperare o modificare i dati di questo tipo.

Quindi, se non si sta scrivendo un estensione del browser, non è possibile, e riceveranno un Security Error.

Ciò che accade quando si trascinano alcuni dati sul desktop dipende dal sistema operativo in uso (la mia converte in alcuni formati di file .textClipping).

1

Argh! Di seguito funziona bene in Chrome:

const jsonData = JSON.stringify(dat); 
event.dataTransfer.setData("DownloadURL", "application/json:crashdump.json:data:application/json;charset=utf-8," + jsonData); 

Anche se non in Safari o Firefox. Che enorme seccatura.

0

È possibile utilizzare il .innerHTML di un elemento <a> per impostare il nome del file collegato

<div class="container"> 
    <h1>Drag out any of these links to your dekstop</h1> 
    <a href="file.txt" id="dragout" class="dragme" draggable="true">file.txt</a>  
</div> 

dove file.txt è un file locale trascinato in file manager a * nix OS che crea un Link to file.txt.

plnkr http://plnkr.co/edit/pif0ZraAn9RbJI8w2z0w?p=preview

Vedi anche Drag File in Data URI format from Browser to Desktop

Problemi correlati