2013-06-03 3 views
8

Im OK 권한이 있습니다.브라우저에서 YouTube에 비디오 업로드

나는 나의 페이지에 2 버튼의이 같은 있습니다

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

은 내가 '업로드'버튼을 클릭하면 유튜브에 선택한 파일을 업로드 할 수 있습니다. 이 같은 함수를 호출 임 : I 올바르게 FILESTREAM을 보내지 않고 것 같은

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은"그것은이다.

+1

이 문제점을 발견 했습니까? 그렇다면 전체 코드를 공유하십시오. 정확히 내가하려는 일이기 때문입니다. – offset

+0

오류가 발생합니다 : "Uncaught ReferenceError : gapi가 정의되지 않았습니다." 왜? – offset

+0

v2 API 사용이 끝났습니다. 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. 

또 다른 자원 : V3 삽입을 사용하는 두 가지 옵션이 있습니다
https://developers.google.com/api-client-library/javascript/samples/samples

+0

캣, 답장을 보내 주셔서 감사합니다. 요청에 비디오 내용이 포함되어 있지 않기 때문에 오류가 발생합니다. 이유는 API가 javascipt를 사용하여 API 삽입을 호출하는 방법을 지정하지 않았기 때문입니다. 예를 들어 내 모든 문제를 해결할 수 있습니다. –

+0

음, 재생 목록을 얻는 예가 있습니다. 도움이 될 것입니다. http://stackoverflow.com/a/12939702/996364 '삽입'예를 찾고 있지만 모두 지금까지 찾은 내 대답과 파이썬 예제에서 두 번째 링크의 Java 예제입니다 otsh를 사용하는 https://developers.google.com/youtube/v3/guides/uploading_a_video –

+0

예 .. 나는 그 코드에 영감을 불어 넣었지만 아직도 운이 없네 .. 네 도움에 고마워. –

1

. 요청은 하나해야

  1. 는 POST 다른 파라미터, 또는 두 부분
  2. 사용 멀티 폼 인코딩 전송 배제 본체와 미디어 파일 있다. 한 부분은 업로드 할 파일이고 다른 부분은 보내려는 매개 변수를 포함하는 파일과 유사한 JSON BLOB입니다.

나는 공식 자바 스크립트 클라이언트를 사용하여이 작업을 진행하지 않았다, 그러나 이것은 일반 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

Stephen, 귀하의 블로그 게시물은 훌륭하지만 그렇지 않습니다. 최종 HTTP 요청을 보여줍니다 ("결과는 성공적으로 업로드되었으며 요청은 루비 보석에 의해 생성 된 것과 매우 흡사합니다.") ... :( – l33t

관련 문제