#javascript #ajax
#javascript #ajax
Вопрос:
Я использую сторонний API для загрузки видео на этот сервер. После того, как я загрузил видео, я делаю проверочный вызов, чтобы проверить, был ли загружен весь файл (‘verifyUpload()’). Если весь файл был загружен, тогда отлично, в противном случае я возобновляю загрузку (‘resumeUpload ()’) с последнего загруженного байта. Проблема, с которой я сталкиваюсь, и я не понимаю почему, заключается в том, что мой ‘resumeUpload ()’, похоже, не выполняется — я неправильно закодировал это?
В консоли я вижу следующие строки, выполняемые из resumeUpload():
console.log(‘vim.resumeUpload() …’);
console.log(‘stringArgument: ‘ stringArgument);
Но вместо строки: xmh.setRequestHeader(‘Content-Range’, stringArgument);
выполняется, я вижу: xmh.setRequestHeader(‘Content-Range’, ‘bytes /‘);
выполняется из verifyUpload() .
verifyUpload()
// VERIFY UPLOAD (SO FAR)
var verifyUpload = function(){
console.log('verifying upload() ...');
var xmh = new XMLHttpRequest;
xmh.onreadystatechange = function(){
console.log('xmh.readyState111: ' xmh.readyState);
console.log('xmh.status111: ' xmh.status);
if(xmh.readyState == xmh.HEADERS_RECEIVED){
console.log('VERIFY RESPONSE HEADERS: ' xmh.getAllResponseHeaders());
console.log('getResponseHeader('Content-Range')' xmh.getResponseHeader("Range"));
var range = xmh.getResponseHeader("Range");
var rangeArray = range.split('-');
var bytesUploaded = rangeArray[1];
bytesUploaded = Number(bytesUploaded);
var leftToUpload = vim.vidFileSize-bytesUploaded;
console.log('bytesUploaded: ' bytesUploaded);
console.log('byteLeftToUpload: ' leftToUpload);
// IF ALL THE FILE HAS BEEN UPLOADED TO THE SERVER
// COMPLETE UPLOAD
if(leftToUpload == 0){
completeVidUpload();
}else{
// NEED TO RESUME UPLOAD FROM WHERE WE LAST LEFT OFF
vim.bytesToUploadFrom = bytesUploaded 1;
var stringValue = 'bytes ' vim.bytesToUploadFrom '-' vim.vidFileSize '/' vim.vidFileSize '';
console.log('stringValue: ' stringValue);
resumeUpload(stringValue);
}
}
}
xmh.open('PUT', vim.upload_link_secure);
xmh.setRequestHeader('Content-Range', 'bytes */*');
xmh.send();
}
resumeUpload():
// RESUME UPLOAD WHERE LEFT OFF
var resumeUpload = function(stringArgument){
console.log('vim.resumeUpload() ...');
console.log('stringArgument: ' stringArgument);
var xmh = XMLHttpRequest;
// SET EVENT LISTENERS
// SET EVENT LISTENERS
xmh.upload.addEventListener('progress', uploadProgres, false);
xmh.addEventListener('load', uploadComplete, false);
xmh.addEventListener('error',uploadError, false);
xmh.onreadystatechange = function(){
if(xmh.readyState == xmh.HEADERS_RECEIVED){
console.log('VERIFY RESPONSE HEADERS222: ' xmh.getAllResponseHeaders());
console.log('getResponseHeader('Content-Range')222' xmh.getResponseHeader("Range"));
}
}
xmh.open('PUT', vim.upload_link_secure);
xmh.setRequestHeader('Content-Range', stringArgument);
xmh.send();
}
Комментарии:
1. Но вместо строки: xmh.setRequestHeader(‘Content-Range’, stringArgument); — Я нигде не вижу, что вы регистрируете
xmh.setRequestHeader('Content-Range', stringArgument);
2. Я вижу из среды разработки браузера в разделе «заголовок запроса», что я отправил
3. вы добавили
new
, как я упоминал в моем ответе?
Ответ №1:
Я думаю, вы пропустили new
resumeUpload
здесь:
var xmh = XMLHttpRequest;