【问题标题】:How download file using java spark?如何使用java spark下载文件?
【发布时间】:2015-01-30 10:13:06
【问题描述】:

我想写一个简单的rest 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;

【问题讨论】:

  • 请注意:错误代码4xx 是客户端错误,而不是通常应为5xx 的服务器错误。

标签: java rest spark-java


【解决方案1】:

您需要的类似于this thread。您只需要关闭 OutputStream 并返回原始 HTTPServletResponse:

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

【讨论】:

    猜你喜欢
    • 2020-07-02
    • 1970-01-01
    • 2015-05-06
    • 2020-08-24
    • 2012-06-03
    • 2011-08-31
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多