diff --git a/designer-base/src/main/java/com/fr/file/FileNodeFILE.java b/designer-base/src/main/java/com/fr/file/FileNodeFILE.java index 04016c5039..c7c6bf2b34 100644 --- a/designer-base/src/main/java/com/fr/file/FileNodeFILE.java +++ b/designer-base/src/main/java/com/fr/file/FileNodeFILE.java @@ -14,7 +14,6 @@ import com.fr.stable.CoreConstants; import com.fr.stable.StableUtils; import com.fr.stable.project.ProjectConstants; import com.fr.workspace.WorkContext; -import com.fr.workspace.resource.WorkResourceOutputStream; import javax.swing.Icon; import java.io.ByteArrayInputStream; @@ -381,7 +380,7 @@ public class FileNodeFILE implements FILE { if (!envPath.startsWith(ProjectConstants.REPORTLETS_NAME)) { return null; } - return new WorkResourceOutputStream(envPath); + return new WorkResourceTempRenameStream(envPath); } /** diff --git a/designer-base/src/main/java/com/fr/file/WorkResourceTempRenameStream.java b/designer-base/src/main/java/com/fr/file/WorkResourceTempRenameStream.java new file mode 100644 index 0000000000..576239b354 --- /dev/null +++ b/designer-base/src/main/java/com/fr/file/WorkResourceTempRenameStream.java @@ -0,0 +1,39 @@ +package com.fr.file; + +import com.fr.stable.ArrayUtils; +import com.fr.stable.project.ProjectConstants; +import com.fr.workspace.WorkContext; +import com.fr.workspace.resource.WorkResource; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +/** + * 这个流会先输出临时文件到服务器. + * 然后再操作服务器对文件进行重命名. + * 用于设计器本地和远程修改模板. + */ +public class WorkResourceTempRenameStream extends ByteArrayOutputStream { + + private String path; + + public WorkResourceTempRenameStream(String path) { + this.path = path; + } + + @Override + public void close() throws IOException { + //写到给定的path上去 + byte[] content = super.toByteArray(); + if (ArrayUtils.isEmpty(content)) { + return; + } + + String tmpPath = path + ProjectConstants.TEMP_SUFFIX; + WorkResource resource = WorkContext.getWorkResource(); + // 输出临时文件到服务器 + resource.write(tmpPath, content); + // 重命名文件 + resource.rename(tmpPath, path); + } +}