js-sdk 版本 1.1.20
_w_tokentype=1 在链接中已传,得到的预览链接中也包含「_w_tokentype=1」
代码
引用的文件 web-office-sdk-v1.1.20.umd.js
console.log('引入后可以开始使用 JSSDK 了~');
console.log(WebOfficeSDK);
const webOfficeHost = document.getElementById('webOfficeHost').value;
async function getOrCreateFileId(params) {
const formData = new FormData();
Object.entries(params).forEach(([key, value]) => formData.append(key, value));
const response = await fetch(webOfficeHost + '/wps/getOrCreateFileId', {
method: 'POST',
body: formData
});
if (!response.ok) {
throw new Error(`HTTP ${response.status} ${response.statusText}: ${await response.text()}`);
}
return await response.json();
}
async function getPreviewLink({ fileId, userId, userName, minioAccessPolicy }) {
const url = webOfficeHost + `/wps/previewLink?fileId=${encodeURIComponent(fileId)}&userId=${encodeURIComponent(userId)}&userName=${encodeURIComponent(userName)}&minioAccessPolicy=${minioAccessPolicy}`;
const response = await fetch(url, { method: 'GET' });
if (!response.ok) {
throw new Error(`HTTP ${response.status} ${response.statusText}: ${await response.text()}`);
}
return await response.json();
}
document.getElementById('previewButton').onclick = async function () {
const params = {
minioConfigKey: document.getElementById('minioConfigKey').value,
minioBucketName: document.getElementById('minioBucketName').value,
minioObjectName: document.getElementById('minioObjectName').value,
minioAccessPolicy: document.querySelector('input[name="minioAccessPolicy"]:checked').value,
userId: document.getElementById('userId').value,
userName: document.getElementById('userName').value
};
const resultDiv = document.getElementById('result');
try {
const data = await getOrCreateFileId(params);
resultDiv.innerHTML = ' 获取文件 Id 成功
' + JSON.stringify(data, null, 2) + '
';
const fileId = data.data;
const previewLinkResult = await getPreviewLink({
fileId,
userId: params.userId,
userName: params.userName,
minioAccessPolicy: params.minioAccessPolicy
});
const previewLink = previewLinkResult.data.link;
console.log('预览链接:', previewLink);
// 配置刷新 token 函数
const refreshToken = () => {
const refreshPreviewLink = getPreviewLink({
fileId,
userId: params.userId,
userName: params.userName,
minioAccessPolicy: params.minioAccessPolicy
});
// 可以返回 Promise 或者 return { token, timeout }
return Promise.resolve({
// 必需:根据自身的业务需求,通过异步请求或者模板输出的方式,取得 token
token: refreshPreviewLink.data.token,
// 必需:token 超时时间,单位为毫秒
timeout: refreshPreviewLink.data.tokenTimeoutSeconds * 1000,
});
};
const jssdk = WebOfficeSDK.config({
// 该地址需要对接方服务端提供,形如 https://wwo.wps.cn/office/p/xxx
url: previewLink,
refreshToken
// 更多配置参数...
})
// 设置 token
jssdk.setToken({
// 必需:根据自身的业务需求,通过异步请求或者模板输出的方式,取得 token
token: previewLinkResult.data.token,
// 必需:token 超时时间,单位为毫秒
timeout: previewLinkResult.data.tokenTimeoutSeconds * 1000,
});
} catch (e) {
console.log("请求失败: ", e);
resultDiv.innerHTML = '请求失败: ' + e.message + '';
}
};