它与 . 无关Jetty
。
您要做的是创建一个Servlet
提供静态文件的服务。
现在,要做到这一点,你需要实现这样的东西:
@WebServlet(name="myAwesomeServlet", urlPatterns={"/filedl"})
public class MyAwesomeServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String fileName = (String) request.getParameter("file");
FileInputStream fis = null;
try {
fis = new FileInputStream(fileName);
response.setContentType("application/octet-stream");
OutputStream out = response.getOutputStream();
IOUtils.copy(fis, out); // this is using apache-commons,
// make sure you provide required JARs
} finally {
IOUtils.closeQuietly(out); // this is using apache-commons,
IOUtils.closeQuietly(fis); // make sure you provide required JARs
}
}
}
如果您不能使用Servlet 3.0 API
,请去掉@WebServlet
注释,并在web.xml
.
然后像这样调用 URL:
http://your.awesome.server.com/filedl?file=path/to/file
如果您希望 URL 更加 RESTful,如下所示:
http://your.awesome.server.com/filedl/file/path/to/file
您需要对参数的解析方式进行一些更改。我会把它作为练习留给你。这种情况可能也是一个很好的将其实现为 REST 服务的案例(请参阅:使用 JAX-RS 构建 RESTful Web 服务 - Java EE 6 教程)。
编辑
如果您想以某种方式将下载的文件限制在单个文件夹中,则需要自己实现。例如,您可以强制在特定文件夹中查找所有文件,如下所示:
String fileName = (String) request.getParameter("file");
File realFileName = new File("/my/restricted/folder", fileName);
...
fis = new FileInputStream(realFileName);
这样,像/fieldl/someFile.txt
fill 这样的 URL 会导致从/my/restricted/folder/someFile.txt
.