/** * Tencent is pleased to support the open source community by making MSEC available. * * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. * * Licensed under the GNU General Public License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may * obtain a copy of the License at * * https://opensource.org/licenses/GPL-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language governing permissions * and limitations under the License. */ package beans.service; import beans.request.DevPackage; import beans.request.ReleasePlan; import beans.response.ReleaseStepsGOResponse; import ngse.org.DBUtil; import ngse.org.JsonRPCHandler; import ngse.org.JsonRPCResponseBase; import org.apache.log4j.Logger; import org.codehaus.jackson.map.ObjectMapper; import sun.rmi.runtime.Log; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpSession; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * Created by Administrator on 2016/2/1. * 下载开发包的每个步骤的处理 */ public class DownloadDevGO extends JsonRPCHandler { private JsonRPCResponseBase doStep1(DevPackage request) { JsonRPCResponseBase response = new JsonRPCResponseBase(); //把计划保存到session里 HttpSession session = getHttpRequest().getSession(); DBUtil util = new DBUtil(); try { util.getConnection(); String sql = "select dev_lang from t_second_level_service where first_level_service_name=? and second_level_service_name=?"; ArrayList<Object> params = new ArrayList<Object>(); params.add(request.getFirst_level_service_name()); params.add(request.getSecond_level_service_name()); Map<String, Object> map = util.findSimpleResult(sql, params); request.setDev_lang((String)map.get("dev_lang")); } catch (Exception e) { request.setDev_lang("c++"); } finally { util.releaseConn(); } session.setAttribute("DevPackage", request); response.setMessage("success"); response.setStatus(0); return response; } private JsonRPCResponseBase doStep2(DevPackage request) { JsonRPCResponseBase response = new JsonRPCResponseBase(); Logger logger = Logger.getLogger(DownloadDevGO.class); HttpSession session = getHttpRequest().getSession(); DevPackage plan = (DevPackage)session.getAttribute("DevPackage"); if (plan == null) { plan = new DevPackage(); session.setAttribute("DevPackage", plan); } //制作tar包,这里还是同步的在当前线程完成,必要的话可以用另外一个 //线程异步的完成。 logger.info("begin making dev package..."); PackDevFile packDevFile = new PackDevFile(plan, getServlet().getServletContext()); packDevFile.run(); if (!packDevFile.getResultString().equals("success")) { response.setMessage(packDevFile.getResultString()); response.setStatus(100); return response; } String fileName = packDevFile.getOutputFileName(); logger.info("dev package path:"+fileName); File f = new File(fileName); String length = String.format("%d", f.length()); //将文件内容直接返回,注意MIME 类型,且exec函数应该返回null getHttpResponse().setHeader("Content-disposition", "attachment;filename="+new File(fileName).getName()); // set the MIME type. getHttpResponse().setContentType("application/x-gzip-compressed"); getHttpResponse().setHeader("Content_Length", length); try { ServletOutputStream out = getHttpResponse().getOutputStream(); FileInputStream fileInputStream = new FileInputStream(f); byte[] buf = new byte[10240]; while (true) { int len = fileInputStream.read(buf); if (len <= 0) { break; } out.write(buf,0, len); } out.flush(); out.close(); fileInputStream.close(); f.delete(); return null; } catch (Exception e) { e.printStackTrace(); return null; } } public JsonRPCResponseBase exec(DevPackage request) { JsonRPCResponseBase response = new JsonRPCResponseBase(); String result = checkIdentity(); if (!result.equals("success")) { response.setStatus(99); response.setMessage(result); return response; } if (request.getSecond_level_service_name() == null || request.getSecond_level_service_name().length() < 1|| request.getFirst_level_service_name() == null || request.getFirst_level_service_name().length() < 1 || request.getStep_number() == null ) { response.setMessage("input is invalid"); response.setStatus(100); return response; } if (request.getStep_number() == 1) { return doStep1(request); } if (request.getStep_number() == 2) { return doStep2(request); } response.setMessage("success"); response.setStatus(0); return response; } }