是否可以在读取标题后但在从请求正文中读取文件数据并将其保存到临时文件之前响应multipart / form-data请求?
我有一个接受大文件的文件上传servlet,如果我可以在加载整个文件之前处理来自请求标头的任何预处理检查,我更愿意。例如,我需要在处理和存储文件之前检查用户是否从会话中进行了身份验证。看起来我必须在发送响应之前调用request.getPart()
或任何解析请求体的方法,否则浏览器不会处理响应。问题是,对于multipart / form-data请求,request.getPart()
会解析正文并读取文件数据并将其存储到磁盘上的临时文件中。
如何在从请求正文加载文件之前只读取标题并发送响应
以下是一个例子:
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// check session (header cookie)
if (!isAuthenticated(request)) {
// This does not work before reading body
forwardLogin(request, response);
return;
}
// Actually parse request body and save the data to a temporary file on disk
Part filePart = request.getPart("file");
// process file
}