2015-08-27 3 views
0

Я работаю над приложением Adobe Air, использующим блестящий API загрузки Vimeo. Загрузка работает очень хорошо.Vimeu resume PUT upload issue on air app

Однако теперь я пытаюсь возобновить загрузку и не могу понять, почему она не работает. Может ли кто-нибудь помочь мне понять, почему?

Вот мой процесс, предложенный в документе. Кодекс AS3:

проверить загрузку

var r:URLRequest = new URLRequest(_ticket.upload_link_secure); 
r.requestHeaders = [ 
    new URLRequestHeader("Authorization", "bearer " + TOKEN), 
    new URLRequestHeader("Content-Length", "0"), 
    new URLRequestHeader("Content-Range", "bytes */*"), 
]; 
r.contentType = "video/mp4" 
r.method = URLRequestMethod.PUT; 

var loader:URLLoader = new URLLoader(); 
loader.dataFormat = URLLoaderDataFormat.BINARY; 
loader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, _resumeProgressComplete); 
loader.load(r); 

==> the result of the request : 
status 308 
the range header is bytes=0-474295 

резюме загрузить

Мой размер видео: 11685783
Размер ByteArray высылается: 6533957
Заголовок Диапазон: 5151826-11685783/11685783
Длина контента: 6533957 (я также пробовал размер ByteArray +1, как показано на th е док)

var r:URLRequest = new URLRequest(_ticket.upload_link_secure); 
r.requestHeaders = [ 
    new URLRequestHeader("Authorization", "bearer " + TOKEN), 
    new URLRequestHeader("Content-Length", contentLength), 
    new URLRequestHeader("Content-Range", range), 
]; 
r.contentType = "video/mp4" 
r.method = URLRequestMethod.PUT; 
r.data = ba; 
_urlLoader.dataFormat = URLLoaderDataFormat.BINARY; 
_urlLoader.addEventListener(Event.COMPLETE, _resumeComplete); 
_urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, _resumeHTTPStatus); 
_urlLoader.load(r); 

статус Результат запроса составляет 200

При загрузке недостающую часть моего видео, которое я асинхронно посылать запросы, чтобы получить ход загрузки

var r:URLRequest = new URLRequest(_ticket.upload_link_secure); 
r.requestHeaders = [ 
    new URLRequestHeader("Authorization", "bearer " + TOKEN), 
    new URLRequestHeader("Content-Length", "0"), 
    new URLRequestHeader("Content-Range", "bytes */*"), 
]; 
r.contentType = "video/mp4" 
r.method = URLRequestMethod.PUT; 
var loader:URLLoader = new URLLoader(); 
loader.dataFormat = URLLoaderDataFormat.BINARY; 
loader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, _uploadProgressComplete); 
loader.load(r); 

Результаты:

bytes=0-0 
bytes=0-228970 
bytes=0-441585 
bytes=0-556070 
... 
bytes=0-6247610 
bytes=0-6492935 
bytes=0-6533957 

Последняя проверка сделана, отправлю хотите завершить загрузку

var r:URLRequest = new URLRequest("https://api.vimeo.com/" + _ticket.complete_uri); 
r.requestHeaders = [ 
    new URLRequestHeader("Authorization", "bearer " + TOKEN) 
]; 
r.method = URLRequestMethod.DELETE; 
_urlLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, _completeUploadComplete); 
_urlLoader.addEventListener(Event.COMPLETE, _completeUploadCompleteData); 
_urlLoader.load(r); 

И вот где я получаю 400 статуса сообщения об ошибке ниже:

{ «ошибка»: "Ваше видео файл не является действительным. Либо вы загрузили неверный формат файла, либо ваша загрузка не завершена. . Убедитесь, что вы подтвердите загрузку, прежде чем отметить его как полный "}

Есть ли что-то не так в моем коде, я следовал документации

ответ

0

благодаря Upload a video file by chunks я мог видеть, где была моя ошибка:

new URLRequestHeader("Content-Range", "bytes " + range), 

я просто забыл «байт» в значении заголовка ...

Кстати, я изменил мой выбор, как написано в ответе на вопрос ниже

И вот результат

var range:String = String(firstByte) + "-" + String(_videoSize - 1) + "/" + String(_videoSize); 

// envoi de la vidéo 
var r:URLRequest = new URLRequest(_ticket.upload_link_secure); 
r.requestHeaders = [ 
    new URLRequestHeader("Authorization", "bearer " + TOKEN), 
    new URLRequestHeader("Content-Length", contentLength), 
    new URLRequestHeader("Content-Range", "bytes " + range), 
]; 
r.contentType = "video/mp4" 
r.method = URLRequestMethod.PUT; 
r.data = ba; 

_urlLoader.dataFormat = URLLoaderDataFormat.BINARY; 
_urlLoader.addEventListener(Event.COMPLETE, _resumeComplete); 
_urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, _resumeHTTPStatus); 
_urlLoader.load(r); 

Днем :)