2016-05-31 2 views
14

Ich versuche, es so zu machen, dass ein Benutzer ein Symbol aus dem Webbrowser auf ihren Desktop ziehen kann, und eine Textdatei ist erstellt. Ich habe den Inhaltsteil unten, aber ich kann nicht herausfinden, wie man den Dateinamen einstellt. Ich habe versucht, dataTransfer.files mutieren, aber das ist schreibgeschützt. Ich bin mir nicht sicher, wie ich das erreichen soll.HTML Ziehen/Ablegen - wie den Dateinamen eines * ausgehenden * ziehen (auf dem 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

_ "Ich habe den Inhalt Teil nach unten bekam" _ Können Sie stacksnippets erstellen oder plnkr http://plnkr.co zu demonstrieren? – guest271314

+0

@ guest271314 Der obige Code tut genau das (Drag/Drop auf den Desktop, eine Datei wird erstellt). Ich füge einen Plunker-Link hinzu. – ffxsam

+1

Keine Datei wird hier bei PLNKR erstellt, indem auf den Desktop gezogen wird, nur wenn Element bei PLNKR in einen Dateimanager gezogen wird, wird _link_ zu Datei erstellt; siehe http://stackoverflow.com/questions/5416748/drag-a-file-from-browser-to-desktop?rq=1#comment53385290_5416795. Mit diesem Ansatz http://stackoverflow.com/questions/29343897/drag-file-in-data-uri-format-from-browser-to-desktop können Sie den Link zum Dateinamen festlegen, indem Sie ".innerHTML" von zum Beispiel ein '' Element, das zum Dateimanager gezogen wird. – guest271314

Antwort

-2

können Sie schreiben

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

Sie könnten erklären, was Sie meinen ... –

+0

Nichts für ungut, aber ich denke, Sandip muss JavaScript lernen. ;) – ffxsam

+0

@ffxsam: kannst du mir bitte sagen, was falsch ist, damit ich meinen Fehler korrigieren kann. –

2

Nach dieser MDN page (Hervorhebung von mir)

Eine lokale Datei gezogen wird mit dem application/x-moz-file Typ mit einer Daten Wert, der eine 0 istObjekt. Nicht privilegierte Webseiten können keine Daten dieses Typs abrufen oder ändern.

Also, wenn Sie nicht eine Browser-Erweiterung zu schreiben, können Sie nicht, und wird eine Security Error erhalten.

Was passiert, wenn Sie einige Daten auf den Desktop ziehen, hängt von Ihrem Betriebssystem ab (meins konvertiert es in ein Dateiformat von .textClipping).

1

Argh! Das Folgende funktioniert gut in Chrome:

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

Obwohl nicht in Safari noch Firefox. Was für ein großer Mist.

0

Sie können die .innerHTML eines <a> Element verwenden Sie den Namen der verknüpften Datei

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

wo file.txt ist eine lokale Datei auf * nix os in Dateimanager gezogen zu setzen, die eine Link to file.txt schafft.

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

Siehe auch Drag File in Data URI format from Browser to Desktop

Verwandte Themen