码迷,mamicode.com
首页 > 其他好文 > 详细

基于JFinal中搭建wopi协议支撑办法

时间:2019-08-17 12:30:52      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:work   sts   pos   RKE   exists   rri   base64   adf   服务   

1、添加maven依赖

 <dependency>
            <groupId>com.github.icecooly</groupId>
            <artifactId>FastHttpClient</artifactId>
            <version>1.7</version>
 </dependency>
 

2、FastHttpClient示例
https://gitee.com/icecooly/FastHttpClient

3、在 Jfinal的Start.java中配置

/**
* 配置路由
 */
public void configRoute(Routes me) {
    me.add("/baseService/wopiImpl", WopiController.class);
}
    

4、WopiController.java

package com.demo.blog;

import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import com.jfinal.core.NotAction;
import com.jfinal.ext.interceptor.GET;
import com.jfinal.ext.interceptor.POST;
import com.jfinal.upload.UploadFile;
import java.io.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

public class WopiController extends Controller {
    private String filePath = "D:\\Work\\";


    /**
     * 功能:配合wopi协议,提供文件下载
     * 作者:黄海
     * 时间:2019-08-17
     * 用例:   http://127.0.0.1/baseService/wopi/files/123.docx/contents
     */
    @Before({GET.class})
    public void download() {
        String filename = getRequest().getRequestURI().split("/")[4];
        renderFile(new File(filePath + filename));
    }

    /**
     * 功能:配合wopi协议,获取文件的信息
     * 作者:黄海
     * 时间:2019-08-17
     * 用例:http://127.0.0.1/baseService/wopi/files/123.docx
     */
    @Before({GET.class})
    public void getInfo() {
        String filename = getRequest().getRequestURI().split("/")[4];
        FileInfo info = new FileInfo();
        try {
            if (filename != null && filename.length() > 0) {
                File file = new File(filePath + filename);
                if (file.exists()) {
                    info.setBaseFileName(file.getName());
                    info.setSize(file.length());
                    info.setOwnerId("admin");
                    info.setVersion(file.lastModified());
                    info.setSha256(getHash256(file));
                }
            }
            renderJson(info);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 功能:配合wopi协议,对修改后的文件进行保存
     * 作者:黄海
     * 时间:2019-08-17
     */
    @Before({POST.class})
    public void save() throws IOException {
        UploadFile uf=getFile("content");
        File upFile = new File(filePath+uf.getFileName());
        if (!upFile.getParentFile().exists()) {
            upFile.getParentFile().mkdirs();
        }
        if(upFile.exists())
        {
            upFile.delete();
        }
        uf.getFile().renameTo(upFile);
        renderNull();
    }

    /**
     * 获取文件的SHA-256值
     *
     * @param file
     * @return
     */
    @NotAction
    private String getHash256(File file) throws IOException, NoSuchAlgorithmException {
        String value = "";
        try (InputStream fis = new FileInputStream(file)) {
            byte[] buffer = new byte[1024];
            int numRead;
            // 返回实现指定摘要算法的 MessageDigest 对象
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            do {
                numRead = fis.read(buffer);
                if (numRead > 0) {
                    // 更新摘要
                    digest.update(buffer, 0, numRead);
                }
            } while (numRead != -1);

            value = new String(Base64.getEncoder().encode(digest.digest()));
        }
        return value;
    }

}

5、FileInfo.java

package com.demo.blog;

import java.io.Serializable;

/**
 * 文件属性对象
 *
 * 由于wopi的接口不遵守驼峰命名规则,所以需要用@JsonProperty指定别名
 * Created by ethendev on 2017/4/15.
 */
public class FileInfo implements Serializable {

    /**
     * 文件名
     */
    private String baseFileName;

    /**
     * 文件所有者的唯一编号
     */
    private String ownerId;

    /**
     * 文件大小,以bytes为单位
     */
    private long size;

    /**
     * 文件的256位bit的SHA-2编码散列内容
     */
    private String sha256;

    /**
     * 文件版本号,文件如果被编辑,版本号也要跟着改变
     */
    private long version;

    /**
     * 允许外部服务的连接
     */
    private boolean allowExternalMarketplace = true;

    /**
     * 更改文件的权限
     */
    private boolean userCanWrite = true;

    /**
     * 是否支持更新
     */
    private boolean supportsUpdate = true;

    /**
     * 是否支持锁定
     */
    private boolean supportsLocks = true;

    public String getBaseFileName() {
        return baseFileName;
    }

    public void setBaseFileName(String baseFileName) {
        this.baseFileName = baseFileName;
    }

    public String getOwnerId() {
        return ownerId;
    }

    public void setOwnerId(String ownerId) {
        this.ownerId = ownerId;
    }

    public long getSize() {
        return size;
    }

    public void setSize(long size) {
        this.size = size;
    }

    public String getSha256() {
        return sha256;
    }

    public void setSha256(String sha256) {
        this.sha256 = sha256;
    }

    public long getVersion() {
        return version;
    }

    public void setVersion(long version) {
        this.version = version;
    }

    public boolean isAllowExternalMarketplace() {
        return allowExternalMarketplace;
    }

    public void setAllowExternalMarketplace(boolean allowExternalMarketplace) {
        this.allowExternalMarketplace = allowExternalMarketplace;
    }

    public boolean isUserCanWrite() {
        return userCanWrite;
    }

    public void setUserCanWrite(boolean userCanWrite) {
        this.userCanWrite = userCanWrite;
    }

    public boolean isSupportsUpdate() {
        return supportsUpdate;
    }

    public void setSupportsUpdate(boolean supportsUpdate) {
        this.supportsUpdate = supportsUpdate;
    }

    public boolean isSupportsLocks() {
        return supportsLocks;
    }

    public void setSupportsLocks(boolean supportsLocks) {
        this.supportsLocks = supportsLocks;
    }

    @Override
    public String toString() {
        return "FileInfo{" +
                "baseFileName=‘" + baseFileName + ‘\‘‘ +
                ", ownerId=‘" + ownerId + ‘\‘‘ +
                ", size=" + size +
                ", sha256=‘" + sha256 + ‘\‘‘ +
                ", version=" + version +
                ", allowExternalMarketplace=" + allowExternalMarketplace +
                ", userCanWrite=" + userCanWrite +
                ", supportsUpdate=" + supportsUpdate +
                ", supportsLocks=" + supportsLocks +
                ‘}‘;
    }

}

6、测试类

package com.demo.blog;
import io.itit.itf.okhttp.*;
import io.itit.itf.okhttp.util.FileUtil;

import java.io.File;
import java.io.InputStream;

public class WopiTest {
    /*

    */
    public static void main(String[] args) throws Exception {
        //1、测试下载文件
        testDownload();
        //2、获取文件信息
        testGetInfo();
        //3、测试修改文件信息
        testSave();
    }

    /**
     * 功能:测试下载文件
     */
    static void testDownload() throws Exception {
        String url = "http://127.0.0.1/baseService/wopi/files/123.docx/contents";
        String savePath="c:\\123.docx";
        InputStream is=FastHttpClient.get().url(url).build().execute().byteStream();
        FileUtil.saveContent(is, new File(savePath));
    }

    /**
     * 功能:测试获取文件信息
     */
    static void testGetInfo() throws Exception {
        String url = "http://127.0.0.1/baseService/wopi/files/123.docx";
        String resp= FastHttpClient.get().url(url).build().execute().string();
        System.out.println(resp);
    }

    /**
     * 功能:测试修改功能
     * 作者:黄海
     * 时间:2019-08-17
     *
     * @return
     * @throws Exception
     */
    static void testSave() throws Exception {
        String url = "http://127.0.0.1/baseService/wopi/files/1234.docx/contents";
        String fileName = "项目通知.docx";
        String filePath = "D:\\日常工作\\" + fileName;
        byte[] fileContent=FileUtil.getBytes(filePath);
        Response response = FastHttpClient.post().
                url(url).
                addFile("content", fileName, fileContent).
                build().
                execute();
        System.out.println(response.body().string());
    }
}

 

基于JFinal中搭建wopi协议支撑办法

标签:work   sts   pos   RKE   exists   rri   base64   adf   服务   

原文地址:https://www.cnblogs.com/littlehb/p/11368100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!