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()); } }
原文地址:https://www.cnblogs.com/littlehb/p/11368100.html
时间: 2024-10-27 12:18:56