Office_文件在线预览


Office_文件在线预览

方案一

开源的组件可以使用:kkfileview 这个组件,具体的部署信息如下:

https://blog.csdn.net/Aria_Miazzy/article/details/131242615

但这个方案有个不足,那就是如果文件信息是存储在阿里云上的,无法实现预览效果。无法解析阿里云的文件地址。(也有可能是我阿里云上的文件信息是私有的原因)

方案二

使用阿里云提供的接口,详细的使用方式如下:

https://help.aliyun.com/document_detail/468066.html

使用方式包含两部分:后端和前端。

  • 引入架包
<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,即可。

文章作者: L Q
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 L Q !
  目录