package com.fr.plugin.file.submit.oss.fun; import com.aliyun.oss.OSSClient; import com.fr.stable.script.NameSpace; import com.fanruan.api.cal.ParameterKit; import com.fanruan.api.net.NetworkKit; import com.fr.decision.fun.impl.BaseHttpHandler; import com.fanruan.api.xml.XmlKit; import com.fr.json.JSONArray; import com.fr.json.JSONObject; import com.fanruan.api.json.JSONKit; import com.fanruan.api.log.LogKit; import com.fr.plugin.file.submit.oss.script.OssSubmitJavaScript; import com.fr.plugin.oss.universal.config.OssUniversalConfig; import com.fr.script.Calculator; import com.fr.stable.ColumnRow; import com.fr.third.springframework.web.bind.annotation.RequestMethod; import com.fr.web.core.ReportSessionIDInfor; import com.fr.web.core.SessionPoolManager; import com.fr.web.session.SessionIDInfo; import com.fanruan.api.session.SessionKit; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; public class OssUploadHttpHandler extends BaseHttpHandler { @Override public RequestMethod getMethod() { return RequestMethod.POST; } @Override public String getPath() { return "/oss/upload"; } @Override public boolean isPublic() { return true; } @Override public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { final String httpRequestEncodeParameter = NetworkKit.getHTTPRequestEncodeParameter(req, "xmlconf", true); if (httpRequestEncodeParameter != null) { String sessionID = NetworkKit.getHTTPRequestParameter(req, "sessionID"); final ReportSessionIDInfor reportSessionIDInfor = SessionPoolManager.getSessionIDInfor(sessionID, ReportSessionIDInfor.class); if (reportSessionIDInfor == null) { return; } final OssSubmitJavaScript javaScript = (OssSubmitJavaScript) XmlKit.readStringAsXMLable(httpRequestEncodeParameter); if (javaScript == null) { return; } final Calculator calculator = Calculator.createCalculator(); final NameSpace create = ParameterKit.createParameterMapNameSpace(SessionKit.parameters4SessionIDInfor(req)); calculator.pushNameSpace(create); this.initCalAttrAndNS(calculator, reportSessionIDInfor, req); boolean b = true; final JSONObject jsonObject = JSONKit.create(); OSSClient ossClient = new OSSClient( OssUniversalConfig.getInstance().getEndPoint(), OssUniversalConfig.getInstance().getAccessKeyId(), OssUniversalConfig.getInstance().getRealAccessKeySecret()); try { this.process(ossClient, javaScript, calculator); } catch (Exception ex) { LogKit.error(ex.getMessage(), ex); b = false; jsonObject.put("errorMsg", ex.getMessage()); } finally { ossClient.shutdown(); } calculator.removeNameSpace(create); final PrintWriter printWriter = NetworkKit.createPrintWriter(res); final JSONArray jsonArray = JSONKit.createJSONArray(); final JSONObject jsonObject2 = JSONKit.create(); jsonObject.put("success", b); jsonObject2.put("oss_submit_info", jsonObject); jsonArray.put(jsonObject2); printWriter.print(jsonArray); printWriter.flush(); printWriter.close(); } } private void process(OSSClient ossClient, OssSubmitJavaScript javaScript, Calculator calculator) throws Exception { OssUpload.upload(calculator, ossClient, javaScript.getSubmitTargetConfig()); } private void initCalAttrAndNS(final Calculator calculator, final ReportSessionIDInfor reportSessionIDInfor, final HttpServletRequest httpServletRequest) { calculator.setAttribute(Calculator.SHEET_NUMBER_KEY, NetworkKit.getHTTPRequestParameter(httpServletRequest, "sheetNum")); reportSessionIDInfor.setUpAttribute4dbCommit(calculator); calculator.pushNameSpace(ParameterKit.createParameterMapNameSpace(reportSessionIDInfor.getParameterMap4Execute())); final ColumnRow value = ColumnRow.valueOf(NetworkKit.getHTTPRequestParameter(httpServletRequest, "location")); if (value != ColumnRow.ERROR) { calculator.setAttribute(ColumnRow.CURRENT_CR_KEY, value); } calculator.pushNameSpace(SessionIDInfo.asNameSpace(reportSessionIDInfor)); } }