从浏览器上传视频到youtube



我被授权了

我的页面上有两个这样的按钮:

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

当我点击"上传"按钮时,我想将所选文件上传到youtube。我这样调用一个函数:

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。

你为什么不能直接使用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

使用v3 insert有两种选择。请求必须:

  1. 将媒体文件作为的主体,这就排除了发送任何其他POST参数,或者
  2. 使用多部分表单编码分为两部分。一部分是要上传的文件,另一部分是类似文件的JSON blob,其中包含您想要发送的任何参数。

我从来没有得到这个工作使用官方的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);

相关内容

  • 没有找到相关文章

最新更新