Azkaban的Web Server源码探究系列18:上传flow涉及的过程分析

谁说胖子不能爱 提交于 2019-12-03 05:08:49

上节涉及到上传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验证

这个要分几个小节来说,下回分解!



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!