2013-06-03 2 views
8

Im OK разрешен.Загрузка видео на youtube из браузера

У меня есть 2 кнопки в этом, как на моей странице:

<input type="file" id="fileToSend"/> 
<input type="button" onclick="upload()" value="Upload" id="btnSend"/> 

Я хочу, чтобы загрузить выбранный файл на YouTube, когда я нажимаю на кнопку «Загрузить». Im вызывая функцию:

function upload() { 
    var fileStream; 
    var video = document.getElementById("fileToSend"); 
    var file = video.files[0]; 
    console.log(file); 
    console.log("Nombre: " + file.name); 
    var r = new FileReader(); 
    r.onload = function() { 
     console.log("fileStream creado"); 
     fileStream = r.result; 
     //console.log("FileStream: " + fileStream); 
    }; 

    console.log("Creando fileStream.."); 
    r.readAsBinaryString(file); 


    gapi.client.load('youtube', 'v3', 
     function() { 
      var request = gapi.client.youtube.videos.insert({ 
       part: 'snippet, status', 
       resource: { 
        snippet: { 
         title: 'Video Test Title 5', 
         description: 'Video Test Description', 
         tags: ['Tag 1', 'Tag 2'], 
         categoryId: "22" 
        }, 
        status: { 
         privacyStatus: "private" 
        } 
       } 
      }, fileStream); 
      request.execute(function (response) { 
       console.log("executing.."); 
       var result = response.result; 
       console.log(response); 
       if (result) { 
        console.log("execute completed"); 
        document.write(result); 
       } 
      }); 
     }); 
} 

Проблема в том, я получаю сообщение об ошибке аль на объекте ответа «mediaBodyRequired», Это как я не посылая FileStream правильно.

+1

Вы обнаружили, что проблема возникает? Если да, поделитесь своим полным кодом, потому что это именно то, что я пытаюсь сделать. – offset

+0

Я получаю сообщение об ошибке: «Uncaught ReferenceError: gapi не определен». Зачем? – offset

+0

В итоге я использовал API v2. Если я найду решение с помощью v3, я опубликую его. –

ответ

3

Есть ли причина, по которой вы не можете просто использовать виджет загрузки YouTube?
https://developers.google.com/youtube/youtube_upload_widget

В любом случае, прямо из ссылки API
https://developers.google.com/youtube/v3/docs/videos/insert

badRequest mediaBodyRequired The request does not include the video content. 

Другой ресурс:
https://developers.google.com/api-client-library/javascript/samples/samples

+0

Кэт, спасибо за ваш ответ. Я знаю, что ошибка связана с тем, что запрос не включает видеоконтент, но причина этого в том, что API не указывает, как создавать вставки API-вызовов с помощью javascipt. Пример поможет решить все мои проблемы. –

+0

Ну, вот пример получения плейлиста ... глядя на него, может помочь вам ... http://stackoverflow.com/a/12939702/996364 Я ищу пример «вставки», но все, что у меня есть найденный до сих пор является примером Java во второй ссылке в моем ответе и примере python https://developers.google.com/youtube/v3/guides/uploading_a_video, который использует oauth –

+0

Да .. Я вдохновил мой код на эти примеры, но до сих пор не повезло ... Спасибо за вашу помощь. –

1

Есть два варианта использования v3 вставки. Запрос должен либо:

  1. имеют медиа-файл как тело, которое исключает возможность отправки каких-либо других параметров POST или
  2. использовать многослойную форму кодирования в двух частях. Одна часть - это файл для загрузки, а другая часть - подобная файловому блоку JSON, которая включает любые параметры, которые вы хотите отправить.

Я никогда не получить эту работу с помощью официального клиента JavaScript, но написал довольно подробное объяснение того, как это может работать, используя регулярные XmlHttpRequest: http://lithostech.com/2013/10/upload-google-youtube-api-v3-cors/

Вот пример первого способа, где сам файл является весь орган запроса:

// where videoFile is a http://www.w3.org/TR/FileAPI/#dfn-file 
var invocation = new XMLHttpRequest(); 
invocation.setRequestHeader('Authorization', 'Bearer ' + token); 
invocation.open('POST', "https://www.googleapis.com/upload/youtube/v3/videos?part=snippet", true); 
invocation.send(videoFile); 
+0

Стивен, ваш пост в блоге замечательный, но он не покажите окончательный http-запрос («Результат - успешная загрузка, и запрос очень похож на тот, который был создан рубиновой жемчужиной».) ... :( – l33t

Смежные вопросы