上节涉及到上传flow,图为
对应的servlet是:
root.addServlet(new ServletHolder(new ProjectManagerServlet()), "/manager");
stop in azkaban.webapp.servlet.ProjectManagerServlet.doPost
下面来debug这个过程!
================================================================================
首先是request的文件提取,代码为:
@SuppressWarnings("unchecked")
public Map<String, Object> parseMultipart(HttpServletRequest request)
throws IOException, ServletException {
// org.apache.commons.fileupload.servlet.ServletFileUpload
ServletFileUpload upload = new ServletFileUpload(_uploadItemFactory);
List<FileItem> items = null;
try {
//基于commons-upload解析
items = upload.parseRequest(request);
} catch (FileUploadException e) {
throw new ServletException(e);
}
Map<String, Object> params = new HashMap<String, Object>();
for (FileItem item : items) {
//开始遍历
if (item.isFormField())
params.put(item.getFieldName(), item.getString());
else
params.put(item.getFieldName(), item);
}
return params;
}
Step completed: "thread=2067661130@qtp-1640296160-4", azkaban.webapp.servlet.MultipartParser.parseMultipart(), line=57 bci=102
57 params.put(item.getFieldName(), item);
2067661130@qtp-1640296160-4[1] print item
item = "name=firstflow.zip, StoreLocation=/tmp/upload_517889bb_131b_4a07_b77b_d926a43bd759_00000000.tmp, size=375 bytes, isFormField=false, FieldName=file"
上面都是上传文件的东西,没啥好说的,azkaban会把zip文件解压缩
然后传给validator来解析,这里是DirectoryFlowLoader验证
这个要分几个小节来说,下回分解!
来源:oschina
链接:https://my.oschina.net/u/1382024/blog/655687