Ich bin neu in PHP und Javascript, daher bin ich mir nicht einmal sicher, ob ich meinen Fall richtig aufdecken kann.

Ich habe ein PHP-Formular, in dem der Client Optionen in seinem Browser auswählt.

Beim Senden muss der Client-Browser eine Excel-Datei von einer anderen Domain herunterladen (ich habe keine Kontrolle über die 2. Serverantwort).

Dies muss auf der Clientseite erfolgen, da nur der Benutzer Zugriff auf die 2. Domäne hat (innerhalb eines lokalen Netzwerks oder aus dem Internet mit einem VPN).

Ich habe es geschafft, den Download mit folgendem Javascript zu erzwingen:

function download(dataurl,filename) {
    var a = document.createElement("a");
    a.href = dataurl;
    a.download = filename;
    a.click();
    window.URL.revokeObjectURL(dataurl);
    a.remove();
}
download(url,filename);

Der Dateiname bewirkt nichts, da die Datei unter dem vom Server gesendeten Namen gespeichert wird.

Nachdem die Datei heruntergeladen wurde, muss ich sie noch umbenennen und in ein bestimmtes Netzwerkverzeichnis verschieben (nur für den Client zugänglich).

Ich kann js fetch nicht verwenden, da der Browser den Download mit CORS blockiert.

Ich bin mir nicht einmal sicher, ob dies aus Sicherheitsgründen möglich ist.

Jede Hilfe wäre sehr dankbar.

0
Miguel 12 Aug. 2020 im 18:50

3 Antworten

Beste Antwort

Wie wäre es als schmutzige Problemumgehung, eine .bat-Datei mit den entsprechenden DOS-Kopierbefehlen zu generieren? Wenn Ihr Benutzer die Datei gerne herunterladen und ausführen möchte, erledigt er möglicherweise die Aufgabe!

Ich habe etwas Ähnliches mit einer Web-App gemacht, die Befehle für ein lokales Makroprogramm generiert.

Beispiel: Sie können Folgendes speichern, um die Datei in das richtige Verzeichnis zu kopieren

copy c:\\path\to\download\file.xls n:\\path\to\networked\destination

Sie können auch integrierte Windows-Befehle verwenden, um den Dateidownload durchzuführen

curl.exe -0 c:\\path\to\download\file.xls https://domain_with_file.com/file.xls

Dies ist jedoch keine ideale Vorgehensweise, und es sieht so aus, als würden heruntergeladene Batchdateien als potenzielle Virenbedrohungen gekennzeichnet.

0
Andrew Paul 13 Aug. 2020 im 09:26

Ich denke, ich habe eine Lösung gefunden (IE nur mit entsprechenden Einstellungen für Internetoptionen):

function test() {
    /* global ActiveXObject*/
    var Excel = new ActiveXObject("Excel.Application");
    Excel.Visible = true; //optional
    Excel.Workbooks.Open("C:\\Users\\user1\\Downloads\\file1.xlsx");
}

Von hier aus glaube ich, dass ich so ziemlich alles machen kann, was ich will.

0
Miguel 13 Aug. 2020 im 06:30

"Ich muss es noch umbenennen und in ein bestimmtes Netzwerkverzeichnis verschieben."

... Sie können dies nicht mit JavaScript tun. JavaScript, das in einem Browser ausgeführt wird, hat aus Sicherheitsgründen keinen Zugriff auf das Dateisystem des Geräts, auf dem es ausgeführt wird.

Alles, was Sie tun können, ist, Anweisungen zu geben, was sie tun müssen. Wenn dies nicht zufriedenstellend ist, müssen Sie dieses Projekt als Desktop-Anwendung und nicht als Webanwendung implementieren.

1
ADyson 12 Aug. 2020 im 15:56