Как скачать файл с помощью java spark?

Я хочу написать простой API для загрузки файлов.

Я не могу найти документы об этом, так как я понял, что мне нужно установить mimetype='application/zip' для ответа, но не ясно, как вернуть поток.

http://sparkjava.com/

обновление: здесь разрешен пример кода:

public static void main(String[] args) {
    //setPort(8080);
    get("/hello", (request, responce) -> getFile(request,responce));
}

private static Object getFile(Request request, Response responce) {
    File file = new File("MYFILE");
    responce.raw().setContentType("application/octet-stream");
    responce.raw().setHeader("Content-Disposition","attachment; filename="+file.getName()+".zip");
    try {

        try(ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(responce.raw().getOutputStream()));
        BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file)))
        {
            ZipEntry zipEntry = new ZipEntry(file.getName());

            zipOutputStream.putNextEntry(zipEntry);
            byte[] buffer = new byte[1024];
            int len;
            while ((len = bufferedInputStream.read(buffer)) > 0) {
                zipOutputStream.write(buffer,0,len);
            }
        }
    } catch (Exception e) {
        halt(405,"server error");
    }

    return null;

person kain64b    schedule 02.12.2014    source источник
comment
Просто примечание: коды ошибок 4xx — это ошибка клиента, а не ошибка сервера, которая обычно должна быть 5xx.   -  person scrutari    schedule 20.09.2017


Ответы (1)


То, что вам нужно, похоже на эта тема. Вам нужно только закрыть OutputStream и вернуть необработанный HTTPServletResponse:

try {
    ...
    zipOutputStream.flush();
    zipOutputStream.close();
} catch (Exception e) {
    halt(405,"server error");
}
return responce.raw();
person an3m0na    schedule 09.03.2015