Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

功能:产品内部已有的附件下载接口(我们下载的时候需要借助产品的附件这个入口实现)

响应:文件流


二、实现

首先我们要依赖于一个插件(标准中有两个请求,但是产品里面第一个获取文件信息的接口并没有实现,所以我们单独做了一个补丁插件把这接口和JS的部分都封装好了)

View file
namefr-plugin-attachment-service-1.0.zip
height250

安装这个插件除了获得获取文件信息接口的能力外,额外的他还给我们提供了一个下载必须要实现的接口(不然没法对接上),当然我们不需要关心这个接口是啥,

因为接下来我们会提供两个辅助的JAR包,接口的实现已经在里面封装好了。这里单独交代一下是为了强调,我们在开发的时候需要依赖上面的这个插件,以获得插件内的接口(开发时别忘了依赖插件里面的JAR包)。


下面这两个JAR包就是我们开发的过程中的一些跟产品内部计算相关的逻辑和简化开发的一些封装了(里面把上传下载会用到的一些FR的东西诸如动态计算,界面处理,我们直接依赖即可。注:也就是我们总的要依赖3个JAR包哟(插件里面一个JAR和下面这两个JAR,下面的两个JAR是需要打包到你自己的插件里面的,上面的插件的JAR只需要依赖不需要打包到你的插件里面)我们会用到两个JAR包(里面把上传下载会用到的一些FR的东西诸如动态计算,界面处理,JS的实现等等的逻辑提前封装好了,我们直接依赖即可)

View file
nametool-tptj-xml-1.0.jar
height250
View file
nametool-tptj-file-operator-1.0.jar
height250

...

我们这里除了文件描述以外没有增加任何其他配置,大家开发的时候根据自己的实际需要定义相关配置即可。


下载我们前面说了,需要通过固定的两个接口和一个固定的JS入口,才能实现对移动端的兼容,这里我们JAR里面已经实现好了,大家只需要继承一下即可最后我们注册到插件里面生效即可

Code Block
languagejava
themeEclipse
firstline1
titleFilterDownloadHyperlinkBridge.java
linenumberstrue
collapsetrue
package com.tptj.bridge.hg.file.load.demo;

import com.tptj.tools.hg.file.operator.bridge.FileMessageFilter;

/**
 * @author 秃破天际
 * @version 10.0
 * Created by 秃破天际 on 2021-01-07
 **/
public class Filter extends FileMessageFilter {
    @Override
    public String filterName() {
        return "Download Filter";
    }

}

Code Block
languagejava
themeEclipse
firstline1
titleFileDownloadJs.java
linenumberstrue
collapsetrue
package com.tptj.bridge.hg.file.load.demo;

import com.tptj.tools.hg.file.operator.bridge.FileDownloadJs;

/**
 * @author 秃破天际
 * @version 10.0
 * Created by 秃破天际 on 2021-01-07
 **/
public class LoadJS extends FileDownloadJs {
}

这个都能看懂,具体实现都在父类里面,感兴趣的点开看看就好,特别简单的。其实这两个接口所有上传下载是共用的,只是产品里面目前还没有实现,所以需要我们单独注册一下。

最后我们注册到插件里面生效即可

Code Block
languagejava
themeEclipse
firstline1
titleDownloadHyperlinkBridge.java
linenumberstrue
collapsetrue
package com.tptj.bridge.hg.file.load.demo;

import com.fr.design.fun.impl.AbstractHyperlinkProvider;
import com.fr.design.gui.controlpane.NameObjectCreator;
import com.fr.design.fun.impl.AbstractHyperlinkProvider;
import com.fr.design.gui.controlpane.NameObjectCreator;
import com.fr.design.gui.controlpane.NameableCreator;
import com.fr.general.ComparatorUtils;

/**
 * @author 秃破天际
 * @version 10.0
 * Created by 秃破天际 on 2021-01-04
 **/
public class DownloadHyperlinkBridge extends AbstractHyperlinkProvider {
    //只需要改这里就可以了
    private NameableCreator nameableCreator = new NameObjectCreator("下载demo",
            DownloadHyperlink.class, DownloadHyperlinkPane.class);

    @Override
    public int hashCode() {
        return nameableCreator.menuName().hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        return (obj != null && obj instanceof DownloadHyperlinkBridge)
                && ComparatorUtils.equals(((DownloadHyperlinkBridge) obj).nameableCreator, nameableCreator);
    }

    @Override
    public NameableCreator createHyperlinkCreator() {
        return nameableCreator;
    }
}

...

Code Block
languagexml
themeEclipse
firstline1
titleplugin.xml
linenumberstrue
<extra-designer>
	<HyperlinkProvider class="com.tptj.bridge.hg.file.load.demo.DownloadHyperlinkBridge"/>
</extra-designer>
<extra-report>
	<JavaScriptFileHandler class="com.tptj.bridge.hg.file.load.demo.LoadJS"/>
</extra-report>
<extra-decision>
	<GlobalRequestFilterProvider class="com.tptj.bridge.hg.file.load.demo.Filter"/>
</extra-decision>

运行效果如下:


接下来我们再来实现对应的上传功能,下载我们每次只能添加一个文件任务(没有做文件夹压缩,感兴趣的同学可以自己在把压缩实现一下即可),那么上传我们希望一次可以多个任务。

...