You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
4.6 KiB
104 lines
4.6 KiB
package com.fr.plugin.file.submit.oss.fun; |
|
|
|
import com.aliyun.oss.OSS; |
|
import com.aliyun.oss.OSSClient; |
|
import com.aliyun.oss.OSSClientBuilder; |
|
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(); |
|
OSS ossClient = new OSSClientBuilder().build( |
|
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(OSS 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)); |
|
} |
|
}
|
|
|