Idee: Ich habe eine Spring Web MVC Aktion, die einen oder beide dieser taks erreichen sollte:herunterladen oder umleiten mit Fehlermeldung an einen anderen Controller-Aktion in Spring Web MVC
- Herunterladen einer Datei von einem entfernten Server und schreibe den Eingangsstrom in die Antwort Ausgangsstrom
- Oder fangen Sie die Ausnahme des Downloads, stellen Sie eine von mehreren Fehlermeldungen und umleiten auf die/Adressen Seite. Die Adresse Seite wird der Fehler angezeigt
Problem: Der Frühling ist nicht in der Lage, eine Datei herunterzuladen und im Falle eines Problems zu umleiten - irgendwie Attribute blinken, weil nicht funktionieren die in der Umleitung verloren gehen:
@ResponseBody
@RequestMapping(value = "/download/{fileaddress}", method = RequestMethod.GET)
public void download(HttpServletRequest request, HttpServletResponse response, @PathVariable(value = "fileaddress") String fileaddress) throws Exception
{
if(fileaddress != null && fileaddress.length() > 0)
{
try
{
// Get the remove file based on the fileaddress
RemoteFile remotefile = new RemoteFile(fileaddress);
// Set the input stream
InputStream inputstream = remotefile.getInputStream();
// Write the input stream to the output stream or throw an exception
Utils.writeTo(inputstream, response.getOutputStream());
}
catch(MyExceptionA)
{
// TODO: Define error message a and pass it to /addresses
// PROBLEM: Flash attributes that contain all critical error information don't work
response.sendRedirect(request.getContextPath() + "/addresses");
}
catch(MyExceptionB)
{
// TODO: Add another error message and redirect
response.sendRedirect(request.getContextPath() + "/addresses");
}
catch(MyExceptionC)
{
// TODO: Add another error message and redirect
response.sendRedirect(request.getContextPath() + "/addresses");
}
catch(MyExceptionN)
{
// TODO: Add another error message and redirect
response.sendRedirect(request.getContextPath() + "/addresses");
}
}
else
{
// TODO: Add error message
response.sendRedirect(request.getContextPath() + "/addresses");
}
}
JSP-Seite von/Adressen:
<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
<%@ taglib prefix="core" uri="http://java.sun.com/jsp/jstl/core" %>
<tags:index>
<jsp:attribute name="content">
<core:if test="${not empty error}">
<div class="alert alert-danger">
<p>${error}</p>
</div>
</core:if>
<p>Page under construction!</p>
</jsp:attribute>
</tags:index>
Frage: Wie ich in der Lage bin die Fehlermeldung angezeigt werden (Einfache Zeichenfolge zum Beispiel) in der/Adressen-Site? Das Arbeiten mit verschiedenen URL-Parametern (error = errora, error = errorb ...) ist ein großer Schmerz, wenn es mehrere Fehlertypen gibt und die Fehlermeldung als GET-Parameter unprofessionell übergibt und die Wurzel von Encodierungsproblemen ist.
Hier könnte ein Problem sein, da IOUtils.toByteArray (inputstream) alles von der Datei in den Speicher liest. Wenn eine Datei zu groß ist, funktioniert diese Vorgehensweise nicht. – Kuvaldis
Ich stimme zu, aber die Frage ist über die '' RedirectAttributes'' nicht zum Streamen von Dateien: D – Babl
Ich habe das Codebeispiel aktualisiert, um Ihre In-Memory-Problem zu beheben :) – Babl