From d1dac8bc6de87ce6cbd9004e1104bee167fb1832 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 21 Jun 2019 10:16:30 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-18400=20=E6=8A=A5=E8=A1=A8API=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E5=AF=BC=E8=87=B4=E6=8F=92=E4=BB=B6=E4=B9=B1=E7=A0=81?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.xml | 6 ++++- plugin.xml | 13 +++++++---- pom.xml | 7 ++++++ .../file/download/oss/OssFile2Image.java | 10 ++++---- .../file/submit/oss/OssLifeCycleMonitor.java | 23 ------------------- .../oss/fun/OssDownloadHttpHandler.java | 14 +++++------ .../plugin/file/submit/oss/fun/OssUpload.java | 18 +++++++++++---- .../submit/oss/fun/OssUploadHttpHandler.java | 8 +++---- .../file/submit/oss/job/OssSubmitJob.java | 8 +++---- .../oss/script/OssSubmitJavaScript.java | 7 +++++- .../oss/ui/OssHyperlink4DownloadPane.java | 4 ++-- .../oss/ui/OssSubmitPathTableModel.java | 4 ++-- .../plugin/file/submit/oss/submit.properties | 3 ++- .../file/submit/oss/submit_zh_CN.properties | 3 ++- .../com/fr/plugin/file/submit/oss/web/oss.js | 4 ++-- 15 files changed, 71 insertions(+), 61 deletions(-) delete mode 100644 src/main/java/com/fr/plugin/file/submit/oss/OssLifeCycleMonitor.java diff --git a/build.xml b/build.xml index 12ec233..6c5931f 100644 --- a/build.xml +++ b/build.xml @@ -1,9 +1,10 @@ - + + @@ -33,6 +34,9 @@ + + + diff --git a/plugin.xml b/plugin.xml index bad7002..31e03db 100644 --- a/plugin.xml +++ b/plugin.xml @@ -1,13 +1,19 @@ com.fr.plugin.file.submit.oss - + yes - 2.5 + 4.2 10.0 - 2018-11-30 + 2019-06-13 author + + + + [2019-03-11]适配最新的10.0。
+ [2018-12-29]移除内置的OSS配置,依赖公共的OSS配置。
[2018-12-04]提供Oss的可视化配置界面。
[2018-11-26]修复文件名中包含特殊字符时无法下载的问题。
[2018-11-21]修复扩展单元格无法正确上传文件的问题。
@@ -33,5 +39,4 @@ -
\ No newline at end of file diff --git a/pom.xml b/pom.xml index 590d96a..ea170a5 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,13 @@ aliyun-sdk-oss 3.3.0 + + com.fr.plugin.oss + oss-universal-config + 1.0 + system + ${project.basedir}/lib/dependence/fr-plugin-oss-universal-config-4.0.jar + diff --git a/src/main/java/com/fr/plugin/file/download/oss/OssFile2Image.java b/src/main/java/com/fr/plugin/file/download/oss/OssFile2Image.java index 1ca2465..a87da91 100644 --- a/src/main/java/com/fr/plugin/file/download/oss/OssFile2Image.java +++ b/src/main/java/com/fr/plugin/file/download/oss/OssFile2Image.java @@ -5,7 +5,7 @@ import com.aliyun.oss.model.OSSObject; import com.fr.general.GeneralUtils; import com.fr.general.IOUtils; import com.fr.log.FineLoggerFactory; -import com.fr.plugin.file.submit.oss.conf.FileSubmitOssServerConfig; +import com.fr.plugin.oss.universal.config.OssUniversalConfig; import com.fr.script.AbstractFunction; import com.fr.stable.ArrayUtils; import com.fr.stable.Primitive; @@ -17,7 +17,7 @@ import java.io.IOException; /** * 将OSS中的文件已图片的方式展示到报表中来 */ -public class OssFile2Image extends AbstractFunction { +public class OssFile2Image extends AbstractFunction { @Override public Object run(Object[] args) { @@ -28,9 +28,9 @@ public class OssFile2Image extends AbstractFunction { String key = GeneralUtils.objectToString(args[0]); String bucket = GeneralUtils.objectToString(args[1]); OSSClient ossClient = new OSSClient( - FileSubmitOssServerConfig.getInstance().getEndPoint(), - FileSubmitOssServerConfig.getInstance().getAccessKeyId(), - FileSubmitOssServerConfig.getInstance().getAccessKeySecret()); + OssUniversalConfig.getInstance().getEndPoint(), + OssUniversalConfig.getInstance().getAccessKeyId(), + OssUniversalConfig.getInstance().getRealAccessKeySecret()); OSSObject object = ossClient.getObject(bucket, key); byte[] bytes = IOUtils.inputStream2Bytes(object.getObjectContent()); try { diff --git a/src/main/java/com/fr/plugin/file/submit/oss/OssLifeCycleMonitor.java b/src/main/java/com/fr/plugin/file/submit/oss/OssLifeCycleMonitor.java deleted file mode 100644 index 41f3e5a..0000000 --- a/src/main/java/com/fr/plugin/file/submit/oss/OssLifeCycleMonitor.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.fr.plugin.file.submit.oss; - -import com.fr.plugin.context.PluginContext; -import com.fr.plugin.file.submit.oss.conf.FileSubmitOssServerConfig; -import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; - -/** - * @author richie - * @version 10.0 - * Created by richie on 2018-12-04 - */ -public class OssLifeCycleMonitor extends AbstractPluginLifecycleMonitor { - @Override - public void afterRun(PluginContext pluginContext) { - // 只是为了初始化一下配置类 - FileSubmitOssServerConfig.getInstance(); - } - - @Override - public void beforeStop(PluginContext pluginContext) { - - } -} diff --git a/src/main/java/com/fr/plugin/file/submit/oss/fun/OssDownloadHttpHandler.java b/src/main/java/com/fr/plugin/file/submit/oss/fun/OssDownloadHttpHandler.java index 0434a36..d5cf285 100644 --- a/src/main/java/com/fr/plugin/file/submit/oss/fun/OssDownloadHttpHandler.java +++ b/src/main/java/com/fr/plugin/file/submit/oss/fun/OssDownloadHttpHandler.java @@ -5,7 +5,7 @@ import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.GeneratePresignedUrlRequest; import com.fr.data.NetworkHelper; import com.fr.decision.fun.impl.BaseHttpHandler; -import com.fr.plugin.file.submit.oss.conf.FileSubmitOssServerConfig; +import com.fr.plugin.oss.universal.config.OssUniversalConfig; import com.fr.stable.StableUtils; import com.fr.third.springframework.web.bind.annotation.RequestMethod; import com.fr.web.utils.WebUtils; @@ -46,20 +46,20 @@ public class OssDownloadHttpHandler extends BaseHttpHandler { private String createDownloadUrl(String bucket, String directory, String fileName) throws Exception { // 创建OSSClient实例。 - OSSClient ossClient = new OSSClient( - FileSubmitOssServerConfig.getInstance().getEndPoint(), - FileSubmitOssServerConfig.getInstance().getAccessKeyId(), - FileSubmitOssServerConfig.getInstance().getAccessKeySecret()); + OSSClient ossClient = new OSSClient( + OssUniversalConfig.getInstance().getEndPoint(), + OssUniversalConfig.getInstance().getAccessKeyId(), + OssUniversalConfig.getInstance().getRealAccessKeySecret()); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MINUTE, 1); - Date expiration = calendar.getTime(); + Date expiration = calendar.getTime(); String key = StableUtils.pathJoin(directory, fileName); GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, key, HttpMethod.GET); // 设置过期时间。 request.setExpiration(expiration); // 生成签名URL(HTTP GET请求)。 - URL signedUrl = ossClient .generatePresignedUrl(request); + URL signedUrl = ossClient.generatePresignedUrl(request); ossClient.shutdown(); return signedUrl.toString(); } diff --git a/src/main/java/com/fr/plugin/file/submit/oss/fun/OssUpload.java b/src/main/java/com/fr/plugin/file/submit/oss/fun/OssUpload.java index dc6a7a0..a9bc2b6 100644 --- a/src/main/java/com/fr/plugin/file/submit/oss/fun/OssUpload.java +++ b/src/main/java/com/fr/plugin/file/submit/oss/fun/OssUpload.java @@ -4,7 +4,9 @@ import com.aliyun.oss.OSSClient; import com.fr.cache.Attachment; import com.fr.general.FArray; import com.fr.general.GeneralUtils; +import com.fr.locale.InterProviderFactory; import com.fr.script.Calculator; +import com.fr.stable.ArrayUtils; import com.fr.stable.StringUtils; import com.fr.stable.xml.FRFile; @@ -16,7 +18,8 @@ public class OssUpload { OssSubmitTarget[] submitTargets = submitTargetConfig.getSubmitTargets(); for (OssSubmitTarget target : submitTargets) { OssVariableValue fileObject = target.getFile(); - Object file = calculator.evalValue(GeneralUtils.objectToString(fileObject)); + String filePath = GeneralUtils.objectToString(fileObject); + Object file = calculator.evalValue(filePath); uploadFile(ossClient, target.getBucket(), file, @@ -25,9 +28,9 @@ public class OssUpload { } } - private static void uploadFile(OSSClient ossClient, String bucket, Object file, String directory, String newFileName) { + private static void uploadFile( OSSClient ossClient, String bucket, Object file, String directory, String newFileName) { if (file instanceof FRFile) { - ossClient.putObject(bucket, directory + "/" + combineName(((FRFile) file).getFileName(), newFileName), new ByteArrayInputStream(((FRFile) file).getBytes())); + uploadSingleFile(ossClient, bucket, directory, combineName(((FRFile) file).getFileName(), newFileName), ((FRFile) file).getBytes()); } else if (file instanceof FArray && ((FArray) file).length() != 0) { FArray array = (FArray)file; for (int i = 0; i < array.length(); i++) { @@ -37,12 +40,19 @@ public class OssUpload { uploadFile(ossClient, bucket, element, directory, newFileName); } } else { - ossClient.putObject(bucket, directory + "/" + combineName(((Attachment) element).getFilename(), newFileName), new ByteArrayInputStream(((Attachment) element).getBytes())); + uploadSingleFile(ossClient, bucket, directory, combineName(((Attachment) element).getFilename(), newFileName), ((Attachment) element).getBytes()); } } } } + private static void uploadSingleFile(OSSClient ossClient, String bucket, String directory, String newFileName, byte[] bytes) { + if (ArrayUtils.isEmpty(bytes)) { + throw new RuntimeException(InterProviderFactory.getProvider().getLocText("Plugin-File_Submit_Oss_Failed", newFileName)); + } + ossClient.putObject(bucket, directory + "/" + newFileName, new ByteArrayInputStream(bytes)); + } + /* * 这里的逻辑是: * 1、如果没有设置文件名,就用上传的文件的名字; diff --git a/src/main/java/com/fr/plugin/file/submit/oss/fun/OssUploadHttpHandler.java b/src/main/java/com/fr/plugin/file/submit/oss/fun/OssUploadHttpHandler.java index 2b0a9d7..e00cc3f 100644 --- a/src/main/java/com/fr/plugin/file/submit/oss/fun/OssUploadHttpHandler.java +++ b/src/main/java/com/fr/plugin/file/submit/oss/fun/OssUploadHttpHandler.java @@ -10,8 +10,8 @@ import com.fr.json.JSONArray; import com.fr.json.JSONFactory; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; -import com.fr.plugin.file.submit.oss.conf.FileSubmitOssServerConfig; 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; @@ -60,9 +60,9 @@ public class OssUploadHttpHandler extends BaseHttpHandler { boolean b = true; final JSONObject jsonObject = JSONObject.create(); OSSClient ossClient = new OSSClient( - FileSubmitOssServerConfig.getInstance().getEndPoint(), - FileSubmitOssServerConfig.getInstance().getAccessKeyId(), - FileSubmitOssServerConfig.getInstance().getAccessKeySecret()); + OssUniversalConfig.getInstance().getEndPoint(), + OssUniversalConfig.getInstance().getAccessKeyId(), + OssUniversalConfig.getInstance().getRealAccessKeySecret()); try { this.process(ossClient, javaScript, calculator); } catch (Exception ex) { diff --git a/src/main/java/com/fr/plugin/file/submit/oss/job/OssSubmitJob.java b/src/main/java/com/fr/plugin/file/submit/oss/job/OssSubmitJob.java index 7302acf..399fc8e 100644 --- a/src/main/java/com/fr/plugin/file/submit/oss/job/OssSubmitJob.java +++ b/src/main/java/com/fr/plugin/file/submit/oss/job/OssSubmitJob.java @@ -5,12 +5,12 @@ import com.fr.data.AbstractSubmitTask; import com.fr.general.xml.GeneralXMLTools; import com.fr.intelli.record.Focus; import com.fr.intelli.record.Original; -import com.fr.plugin.file.submit.oss.conf.FileSubmitOssServerConfig; import com.fr.plugin.file.submit.oss.fun.OssConstants; import com.fr.plugin.file.submit.oss.fun.OssSubmitTarget; import com.fr.plugin.file.submit.oss.fun.OssSubmitTargetConfig; import com.fr.plugin.file.submit.oss.fun.OssUpload; import com.fr.plugin.file.submit.oss.fun.OssVariableValue; +import com.fr.plugin.oss.universal.config.OssUniversalConfig; import com.fr.record.analyzer.EnableMetrics; import com.fr.report.worksheet.CalculatableResWorkSheet; import com.fr.script.Calculator; @@ -53,9 +53,9 @@ public class OssSubmitJob extends AbstractSubmitTask { @Focus(id = "com.fr.plugin.file.submit.oss", text = "Plugin-File_Submit_OSS", source = Original.PLUGIN) public void doJob(Calculator ca) throws Exception { ossClient = new OSSClient( - FileSubmitOssServerConfig.getInstance().getEndPoint(), - FileSubmitOssServerConfig.getInstance().getAccessKeyId(), - FileSubmitOssServerConfig.getInstance().getAccessKeySecret()); + OssUniversalConfig.getInstance().getEndPoint(), + OssUniversalConfig.getInstance().getAccessKeyId(), + OssUniversalConfig.getInstance().getRealAccessKeySecret()); CalculatableResWorkSheet currentReport = ca.getAttribute(DMLReport.KEY); if (submitTargetConfig != null && currentReport != null) { ColumnRow[] crs = calculateRelatedColumnRows(submitTargetConfig); diff --git a/src/main/java/com/fr/plugin/file/submit/oss/script/OssSubmitJavaScript.java b/src/main/java/com/fr/plugin/file/submit/oss/script/OssSubmitJavaScript.java index f77f168..13bbaeb 100644 --- a/src/main/java/com/fr/plugin/file/submit/oss/script/OssSubmitJavaScript.java +++ b/src/main/java/com/fr/plugin/file/submit/oss/script/OssSubmitJavaScript.java @@ -5,6 +5,7 @@ import com.fr.js.AbstractJavaScript; import com.fr.json.JSONObject; import com.fr.plugin.file.submit.oss.fun.OssSubmitTargetConfig; import com.fr.stable.AssistUtils; +import com.fr.stable.CommonCodeUtils; import com.fr.stable.web.Repository; import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLableReader; @@ -23,7 +24,11 @@ public class OssSubmitJavaScript extends AbstractJavaScript { @Override protected String actionJS(Repository repository) { - return "var fm = new FR.OssForm();fm.ossCommit({xmlconf:" + JSONObject.quote(GeneralXMLTools.writeXMLableAsString(this)) + "},this)"; + return "var fm = new FR.OssForm();fm.ossCommit({xmlconf:" + quote(GeneralXMLTools.writeXMLableAsString(this)) + "},this)"; + } + + private String quote(String string) { + return "\"" + CommonCodeUtils.javascriptEncode(string) + "\"" ; } @Override diff --git a/src/main/java/com/fr/plugin/file/submit/oss/ui/OssHyperlink4DownloadPane.java b/src/main/java/com/fr/plugin/file/submit/oss/ui/OssHyperlink4DownloadPane.java index 0864498..9215fc3 100644 --- a/src/main/java/com/fr/plugin/file/submit/oss/ui/OssHyperlink4DownloadPane.java +++ b/src/main/java/com/fr/plugin/file/submit/oss/ui/OssHyperlink4DownloadPane.java @@ -8,9 +8,9 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.general.GeneralUtils; -import com.fr.plugin.file.submit.oss.conf.FileSubmitOssServerConfig; import com.fr.plugin.file.submit.oss.fun.OssVariableValue; import com.fr.plugin.file.submit.oss.script.OssDownloadHyperlink; +import com.fr.plugin.oss.universal.config.OssUniversalConfig; import javax.swing.*; import java.awt.*; @@ -27,7 +27,7 @@ public class OssHyperlink4DownloadPane extends BasicBeanPane