Office_文件在线预览
方案一
开源的组件可以使用:kkfileview 这个组件,具体的部署信息如下:
但这个方案有个不足,那就是如果文件信息是存储在阿里云上的,无法实现预览效果。无法解析阿里云的文件地址。(也有可能是我阿里云上的文件信息是私有的原因)
方案二
使用阿里云提供的接口,详细的使用方式如下:
使用方式包含两部分:后端和前端。
- 引入架包
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>imm20200930</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-openapi</artifactId>
<version>0.2.8</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-console</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-util</artifactId>
<version>0.2.21</version>
</dependency>
- 创建后端方法
@Service
public class TFileOnlineHandler {
@Resource
private OSSConfig ossConfig;
@Resource
private ITFileService fileService;
// 文件预览时的项目名
private static final String projectName = "xxxx";
/**
* 创建连接
* @param accessKeyId
* @param accessKeySecret
* @return
* @throws Exception
*/
public Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config()
.setAccessKeyId(accessKeyId)
.setAccessKeySecret(accessKeySecret);
config.endpoint = ossConfig.getEndImmPoint();
return new Client(config);
}
/**
* 预览方法
* @return
* @throws Exception
*/
public String online(long id) throws Exception {
// 根据 ID 查询文件地址
TFile file = fileService.getById(id);
// 调取阿里云接口
Client client = createClient(ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
System.out.println("oss://xxxx/" + file.getUrl());
GenerateWebofficeTokenRequest generateWebofficeTokenRequest = new GenerateWebofficeTokenRequest()
.setProjectName(projectName)
.setSourceURI("oss://xxxx/" + file.getUrl())
.setPermission(new WebofficePermission().setReadonly(true));
RuntimeOptions runtime = new RuntimeOptions();
// 调取方法
try {
GenerateWebofficeTokenResponse response = client.generateWebofficeTokenWithOptions(generateWebofficeTokenRequest, runtime);
return new Gson().toJson(response.getBody());
} catch (TeaException error) {
Common.assertAsString(error.message);
return error.message;
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
Common.assertAsString(error.message);
return error.message;
}
}
/**
* 刷新 Token 方法
* @param accessToken
* @param refreshToken
* @return
* @throws Exception
*/
public String refresh(String accessToken, String refreshToken) throws Exception {
// 调取阿里云接口
Client client = createClient(ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret());
RefreshWebofficeTokenRequest refreshWebofficeTokenRequest = new RefreshWebofficeTokenRequest()
.setProjectName(projectName)
.setAccessToken(accessToken)
.setRefreshToken(refreshToken);
RuntimeOptions runtime = new RuntimeOptions();
// 调取方法
try {
RefreshWebofficeTokenResponse response = client.refreshWebofficeTokenWithOptions(refreshWebofficeTokenRequest, runtime);
return new Gson().toJson(response.getBody());
} catch (TeaException error) {
Common.assertAsString(error.message);
return error.message;
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
Common.assertAsString(error.message);
return error.message;
}
}
}
- 根据文档上的教程,引入前端的 html,即可。