jumini: Sidebar Gadget (IE9+): Binär-Upload großer Dateien

Hallo zusammen,

folgende Idee: ich möchte ein Gadget für die Windows Vista & 7 Sidebar (ja, die mag Deprecated sein) veröffentlichen,
mit welchem ich Dateien via Drag & Drop an einen HTTP-Server übermitteln kann.

Grundsätzliche Infos zur Sidebar:
Die Gadgets werden vom Internet Explorer verarbeitet, dabei stehen erweiterte Sicherheitsrichtlinien zur Verfügung.

Voraussetzungen:

  • Ich möchte sowohl Binäre- als auch Textdateien übertragen können.
  • Der Fortschritt des Uploadvorgangs soll möglichst ohne Rückfrage beim Empfänger ermittelt werden können.
  • Auch große Dateien (mind. 500 MB) sollen übertragen werden können.

Ansätze:
Der IE9 schließt ein Drag & Drop via HTML5 leider aus.

Dafür kann eine Datei mit den folgenden Body-Attributen
entgegen genommen werden:

<body  
 ondragenter="event.returnValue = false"  
 ondragover="event.returnValue = false"  
 ondragleave="event.returnValue = false"  
 ondrop="GetItemFromDrop()"></body>

Mit folgendem Schnipsel kann ich den Inhalt der gedropten Datei auch bereits an den Server übermitteln:

  
// ich habe die Zieldatei bereits mit  
// System.Shell.itemFromFileDrop(event.dataTransfer, intIndex)  
// entgegen genommen, sie befindet sich in oItem  
  
var adTypeBinary = 1;  
var adTypeText = 2;  
  
var oStream = new ActiveXObject("ADODB.Stream");  
oStream.Type = adTypeText;  
oStream.CharSet = "UTF-8";  
oStream.Open;  
oStream.LoadFromFile(oItem.path);  
  
var fileData = oStream.ReadText;  
oStream.Close;  
  
var boundaryString = "AaBbCcX30";  
var boundary = "--" + boundaryString;  
  
var postContent = "\r\n"+boundary+"\r\n"+  
 "Content-Disposition: form-data; name=\"data\"\r\n"+  
 "\r\n"+  
 boundary+"\r\n"+  
 "Content-Disposition: file; name=\"file\"; filename=\"xxx.mp3\"\r\n"+  
 "Content-Type: text/plain\r\n"+  
 "\r\n"+  
 "%FILECONTENT%\r\n"+  
 boundary+"\r\n";  
  
postContent = postContent.replace("%FILECONTENT%", fileData);  
  
var req = new XMLHttpRequest();  
req.open("POST", url, true);  
req.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundaryString);  
	req.onreadystatechange = function() {  
		if(req.readyState == 4) {  
			if(req.status == 200) {  
				alert('strike!');	  
			}  
		}  
	};  
	  
	req.send(postContent);  
}

Natürlich führt das zu Problemen bei Dateien jenseits der 10 MB.
Auch der Vortschritt der Übertragung ist nicht ohne weiteres(?) ersichtlich.

Ich würde die Datei gerne weiterhin über die Shell entgegen nehmen,
dann aber mit einem Flash-Uploader weiterverarbeiten - z.B. dem YUI Uploader.
Dieser akzeptiert jedoch leider nur Dateien die über das eigene Explorer-
Fenster ausgewählt werden. Lässt sich die Datei auf einem anderen Weg oder
mit einem anderen Tool entgegennehmen?

Für weitere Ideen bin ich sehr dankbar!

  1. Lieber jumini,

    Du verwendest da unvereinbare Dinge:

    • IE
    • Drag&Drop
    • Sicherheit

    Gerade der IE hat sich mit Drag&Drop unter dem Aspekt der Sicherheit mit Negativ-Schlagzeilen in der IT-Welt einen Namen gemacht.

    Dabei ist eher die Frage nach der Sicherheit für den Client (also Windows) als die Frage nach der Sicherheit für den betroffenen Webserver gemeint. Letzterem ist es völlig egal wer da unter welchen Umständen den HTTP-Request erzeugt und abgesendet hat.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Lieber Felix,

      danke für deine Reaktion.

      Dabei ist eher die Frage nach der Sicherheit für den Client (also Windows) als die Frage nach der Sicherheit für den betroffenen Webserver gemeint. Letzterem ist es völlig egal wer da unter welchen Umständen den HTTP-Request erzeugt und abgesendet hat.

      Kannst du mir das bitte etwas genauer erläutern? Ich möchte dem Client ja schlichtweg den Upload ermöglichen, sofern dieser eine Datei "dropped".
      Ob der Endanwender das Gadget nicht installiert, weil er über die Sicherheit des eigenen Systems beunruigt ist, stellt ja ein völlig anderes Kapitel dar. Oder verstehe ich dich falsch?

      Dass es mit weniger hohen Ansprüchen umsetzbar ist (ohne Übertragungsstatus und lediglich Dateien unterhalb der 10 MB), zeigt z.B. das Cloud Drive Gadget.

      Aktuell versuche ich mich in VB, möchte die Lösung über die Sidebar aber nicht so richtig fallen lassen :/

      Grüße