为什么Autodesk Forge nodejs API分块上传最后一块上传之后返回值依然是202?

发布于 2022-09-12 03:28:20 字数 2169 浏览 26 评论 0

我调用Forge的Nodejs API,使用uploadChunk接口上传大模型,每个块分成2m大小上传,最后一个上传之后返回值依然是202,按文档说明不应该是200吗?而且得不到返回的ObjectKey等值。下面是我的代码:

async function uploadModel(fileInfos, options) {
    const chunkSize = (options.chunkSize || 2) * 1024 * 1024; //碎片大小,默认2m
    const chunkCount = Math.round(0.5 + fileInfos.size / chunkSize);
    let details = null;
    for (let i = 0; i < chunkCount; i++) {
        const start = i * chunkSize;
        const end = Math.min(fileInfos.size, (i + 1) * chunkSize);
        details = null;
        while (!details) {
            details = await uploadChunk(fileInfos, start, end);
        }
        options.callback && options.callback(i + 1, chunkCount);
    }
    console.log(details);
    //await translateObject(details.objectId, options);
}
async function uploadChunk(fileInfos, start, end) {
    const credentials = await getInternalToken();
    const oauth2client = getClient();
    const contentLength = end - start; //后面用的slice方法不包括end索引指向的字节
    const contentRange = `bytes ${start}-${end-1}/${fileInfos.size}`;
    console.log(contentRange);
    const buffer = fileInfos.data.slice(start, end); //slice方法不包括end索引指向的字节
    const sessionId = md5(buffer);
    try {
        //https://github.com/Autodesk-Forge/forge-api-nodejs-client/blob/master/docs/ObjectsApi.md#uploadchunk
        let details = await new ObjectsApi().uploadChunk(bucketKey, fileInfos.name, contentLength, contentRange, sessionId, buffer, {}, oauth2client, credentials);
        return details;
    } catch (err) {
        console.log(err);
        return null;
    }
}

调用之后最后得到的结果是:
`{
statusCode: 202,
headers: {

'accept-ranges': 'bytes',
'access-control-allow-headers': 'Authorization, Accept-Encoding, Range, Content-Type',
'access-control-allow-methods': 'GET',
'access-control-allow-origin': '*',
'content-range': 'bytes 427819008-429560714/429560715',
date: 'Tue, 30 Jun 2020 04:42:00 GMT',
'x-ads-chunk-sha1': '84d5fee9e9ec849cb1a9a5931b3da6750be8af08',
'content-length': '0',
connection: 'Close'

},
body: ''
}`

是还有别的参数需要设置吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

淑女气质 2022-09-19 03:28:20

找到问题所在了,是一个文件的所有碎片都用同一个sessionId,而不是一个碎片就用一个sessionId。但是接下来的问题是:怎么删除forge服务端之前上传的无用碎片?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文