function _uploadChunk(fileName, filePath, oAuth2TwoLegged, credentials, progressCallback) {
return new Promise((resolve, reject) => {
let objectApi = new ForgeSDK.ObjectsApi()
let fileState = fs.statSync(filePath)
let fileSize = fileState.size
let chunkSize = 2 * 1024 * 1024
let nbChunks = Math.round(0.5 + fileSize / chunkSize)
let sessionID = 'testviotv4054irt'// + Math.floor(Date.now() / 1000)
for (let index = 0; index < nbChunks; index++) {
let start = index * chunkSize
let end = Math.min(fileSize, (index + 1) * chunkSize) - 1
let contentRange = 'bytes ' + start + '-' + end + '/' + fileSize
let readStream = fs.createReadStream(filePath, { start: start, end: end })
objectApi.uploadChunk(config.defaultBucketKey, fileName, fileSize, contentRange, sessionID, readStream, {}, oAuth2TwoLegged, credentials)
.then(object => {
if (object.statusCode == 202) {
progressCallback(object.body)
} else if (object.statusCode == 202) {
resolve(object.body)
}
}).catch(err => {
resolve(err)
})
}
})
}
まず、コードの UploadChunk は、特定のチャンクのサイズではなく、ファイル全体のサイズである fileSize を使用します。さらに、最後のブロックが成功した後のステータスである object.statusCode == 200 のステータスが必要です。
私は ES6 にあまり詳しくないので、Forge Node.js SDK のテスト スクリプトを元に、155 行目の UploadFile をテスト用に置き換えて関数を書きました。
リーリー