如何配置码头处理程序以根据请求创建名称以下载文件

how to configure jetty handler to create a name upon request to download a file

我们有一个非常非常简单的 API 可以根据请求发送文件

服务器是:

public class Server {
    public static void main(String... args) throws Exception {
        // start the server
        System.out.println("starting jetty...");
        final org.eclipse.jetty.server.Server server = new org.eclipse.jetty.server.Server(80);
        server.setHandler(new Handler());
        server.start();
        System.out.println("jetty server has started");

    }
}

和处理程序:

public class Handler extends AbstractHandler {
    @Override
    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

            if(target.matches("/get")){
                   File file = getFile(); //assume filename is myFile.zip
                    byte[] bytes = FileUtils.readFileToByteArray(file);
                    response.getOutputStream().write(bytes);
                    response.flushBuffer();
            }

    }
}

当我从浏览器向 localhost:80/get 发出请求时,它保存了所需的文件,但浏览器将其命名为 get

需要进行哪些更改才能使请求将文件另存为 myFile.zip?

您可以添加这样的文件名:

response.setHeader("Content-Disposition", "filename=myFile.xyz");

如果您希望浏览器打开保存对话框添加附件:

response.setHeader("Content-Disposition", "attachment; filename=myFile.xyz");