В форме сообщения пользователь загружает файл, я читаю файл, обрабатываю его и отправляю обратно CSV (StreamResponse).Я столкнулся с проблемой потоковой передачи результатов.В Firebug я вижу пост-ответ как «302 Moved Temporary», и моя страница снова перезагружается без отображения потокового файла.Я думаю, что переадресация после публикации Tapestry заставляет страницу перезагружаться, а не возвращать файл, который я посылаю.Это то, что происходит?Как мне преодолеть это?Буду признателен за любую помощь!
Вот мой код:
(сократить его только до основной части)
@Log
StreamResponse onSuccess() throws IOException {
File tmpFile = File.createTempFile(urlFile.getFileName(), null);
BufferedWriter br = new BufferedWriter(new FileWriter(tmpFile));
br.append("something to test\nAnother line to test");
br.flush();
br.close();
return new CsvStreamResponse(new FileInputStream(tmpFile.getAbsolutePath()), "results_file");
}
public class CsvStreamResponse implements StreamResponse {
private InputStream is;
private String filename;
public CsvStreamResponse(InputStream is, String filename) {
this.is = is;
this.filename = filename;
}
public String getContentType() {
return "text/csv";
}
public InputStream getStream() throws IOException {
return is;
}
public void prepareResponse(Response response) {
response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".csv");
}
}
Мой TML
<form t:type="form" t:id="analysis">
<t:upload t:id="urlFile" class="marginRight" validate="required"/>
<t:submit class="marginRight white button medium" value="${message:button.upload}" t:id="upload"/>
</form>