使用node.js将文件从S3上传到Youtube

use*_*009 5 youtube amazon-s3 amazon-web-services node.js

使用以下代码将文件从S3上传到youtube:

s3.setBucket('MyBucket'); 
s3.get('MyBucket/5/' + filename, null, 'stream', function(err, response) {  
    googleapis.discover('youtube', 'v3').execute(function(err, client) {
      var metadata = {
              snippet: { title: title, description: description}, 
                status: { privacyStatus: 'public' }
      };
      client
          .youtube.videos.insert({ part: 'snippet,status'}, metadata)
          .withMedia('video/mp4', response)
          .withAuthClient(auth)
          .execute(function(err, result) {
            if (err) console.log(err);
            else console.log(JSON.stringify(result, null, '  '));
            response.redirect('/share?set=yt&id=' + result.id);
          });       });     });
Run Code Online (Sandbox Code Playgroud)

不起作用,因为行:

.withMedia('video/mp4',回复)

它是原始版本的替代品,有效:

fs.readFileSync( '/温度/ myfile.png')

换句话说:如果我在笔记本电脑上上传本地文件,这将有效,因为我正在使用文件系统对象.

Abo*_*ein 7

如果有人在寻找答案,这里是:

var googleapis = require('googleapis'),
    OAuth2 = googleapis.auth.OAuth2,
    ytdapi = googleapis.youtube('v3'),
    AWS = require('aws-sdk'),
    s3  = new AWS.S3;

var s3data = {
    Bucket: 'BUCKET_NAME',
    Key: 'VIDEO_NAME'
};

s3.getObject(s3data, function (err, data) {
    var params = {
        auth: oauth2Client,
        part: 'snippet,status',
        resource: {
            snippet: {
                title: 'Title',
                description: 'Description'
            },
            status: {
                privacyStatus: 'public'
            }
        },
        media: {
            mimeType: 'video/mp4',
            body: data.Body
        }
    };
    
    ytdapi.videos.insert(params, function (err, result) {
        if (err) console.log(err);
        else console.log(JSON.stringify(result, null, '  '));
    });
});
Run Code Online (Sandbox Code Playgroud)