Heim >Web-Frontend >js-Tutorial >Wie löst man Dateidownloads mit Ajax und einer Struts2-Aktion aus?
Asynchroner Dateidownload mit Ajax
Im bereitgestellten Szenario stoßen Sie auf ein Problem, bei dem eine Struts2-Aktion zum Herunterladen von Dateien verwendet wird, aber jQuery Der Aufruf post() ruft die Datei als Binärstream ab, anstatt ein Fenster zum Herunterladen der Datei zu öffnen. Ziel dieses Artikels ist es, das Problem anzugehen und eine Lösung bereitzustellen, um das Datei-Download-Fenster aufzurufen.
Der Schlüssel zum Ermöglichen von Datei-Downloads mit Ajax liegt in der Verwendung des Content-Disposition-Antwortheaders. Dieser Header sollte auf Anhang gesetzt sein; filename={fileName}, wobei {fileName} den gewünschten Dateinamen darstellt. Indem Sie diesen Header festlegen, weisen Sie den Browser an, den Benutzer mit einem Datei-Download-Fenster aufzufordern.
Um den Content-Disposition-Header in Ihrer Struts2-Aktion dynamisch zu ändern, können Sie einen Interceptor verwenden. Hier ist ein Beispiel, wie Sie dies tun können:
public class DownloadInterceptor implements Interceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { HttpServletResponse response = ServletActionContext.getResponse(); response.setHeader("Content-Disposition", "attachment; filename=" + actionInvocation.getArgs()[0]); // Replace with your code return invocation.invoke(); } @Override public void destroy() {} @Override public void init() {} }
Sobald Sie den Interceptor implementiert haben, können Sie ihn auf die Download-Aktion anwenden, um den Content-Disposition-Header dynamisch festzulegen.
Von Wenn Sie diese Schritte kombinieren, können Sie Ihre Struts2-Anwendung so konfigurieren, dass sie Dateien asynchron mit Ajax herunterlädt und Benutzern ermöglicht, die Dateien lokal zu speichern.
Das obige ist der detaillierte Inhalt vonWie löst man Dateidownloads mit Ajax und einer Struts2-Aktion aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!