Я следил за обсуждением на странице spark github, а также за переполнением стека, чтобы понять, как загружать файлы, используя загрузку файлов spark и apache.
Теперь я хочу, чтобы у пользователя была возможность загрузить изображение по клику.
Например, мои загруженные файлы сохраняются в /tmp/imageName.jpg на сервере.
На стороне клиента я хочу дать пользователю возможность загрузить файл, когда пользователь щелкает гиперссылку.
<a href="/image/path">click here</a>
Когда пользователь нажмет на гиперссылку, я вызову функцию с путем к файлу, но не могу понять, как отправить изображение в ответ.
Я знаю, что HTML5 имеет атрибут загрузки, но для этого файлы должны храниться в общая папка на сервере, что невозможно.
Я рассмотрел предыдущий аналогичный вопрос, который безуспешно пытался воспроизвести для моего сценария.
Как я могу отправить PNG QR-кода в теле ответа HTTP (с помощью Spark)?
Как скачать файл с помощью java spark?
Изменить: я перешел по ссылке, указанной в ответе, чтобы принудительно загрузить изображение, но с помощью response.raw() я не могу получить ответ
response.type("application/force-download");
response.header("Content-Transfer-Encoding", "binary");
response.header("Content-Disposition","attachment; filename=\"" + "xxx\"");//fileName);
try {
HttpServletResponse raw = response.raw();
PrintWriter out = raw.getWriter();
File f= new File("/tmp/Tulips.jpg");
InputStream in = new FileInputStream(f);
BufferedInputStream bin = new BufferedInputStream(in);
DataInputStream din = new DataInputStream(bin);
while(din.available() > 0){
out.print(din.read());
out.print("\n");
}
}
catch (Exception e1) {
e1.printStackTrace();
}
response.status(200);
return response.raw();
Редактировать 2:
Я не уверен, в чем разница между использованием response.body() и response.raw().someFunction(). В любом случае я могу отправить данные обратно в ответ. Даже если я напишу простой response.body("hello"), это не отразится на моем ответе.
Есть ли разница в том, как будет читаться файл, а не изображение? Пример использования класса ImageIO?