in templates/nodejs/src/video-uploader.js [213:261]
async sendRequest(context: VideoUploadRequestContext): Object {
// Init a VideoUploadRequest
const request = new VideoUploadRequest(this._api);
var start_offset = context.startOffset;
var end_offset = context.endOffset;
const filePath = context.filePath;
const fileSize = fs.statSync(filePath).size;
// Give a chance to retry every 10M, or at least twice
let numRetry = Math.max(fileSize / (1024 * 1024 * 10), 2);
let response = null;
// While there are still more chunks to send
const videoFileDescriptor = fs.openSync(filePath, 'r');
while (start_offset !== end_offset) {
context.startOffset = start_offset;
context.endOffset = end_offset;
let params = {
upload_phase: 'transfer',
start_offset: context.startOffset,
upload_session_id: context.sessionId,
video_file_chunk: context.videoFileChunk,
};
request.setParams(params, {
video_file_chunk: fs.createReadStream(context.filePath, {
start: context.startOffset,
end: context.endOffset - 1,
}),
});
// Send the request
try {
response = await request.send([context.accountId, 'advideos']);
start_offset = parseInt(response['start_offset']);
end_offset = parseInt(response['end_offset']);
} catch (error) {
if (numRetry > 0) {
numRetry = Math.max(numRetry - 1, 0);
continue;
}
fs.close(videoFileDescriptor, err => {});
throw error;
}
}
this._startOffset = start_offset;
this._endOffset = end_offset;
fs.close(videoFileDescriptor, err => {});
return response;
}