node.js - 在 Electron 版本中,YouTube API上传返回状态200,并且没有错误,但没有上传。相同的代码可在常规NodeJS项目中使用

标签 node.js google-api electron youtube-data-api

我正在尝试使用来自googleapis的YouTube v3 api将视频上传到YouTube。当我这样做时,videos.insert函数将返回以下输出(底部对象):image of output
执行此过程大约需要5秒钟,并返回状态200。但是,问题是它实际上没有上传视频,确实插入了我的YouTube视频中,但是没有上传数据并且YouTube显示失败上载。
问题不在于身份验证,因为我可以使用相同的OAuth2请求 channel 信息,并且不返回任何错误。
对我来说,最奇怪的是,使用相同的googleapis库的相同代码确实可以在常规NodeJS项目上使用。它可以正确上传视频。
有谁知道与NodeJS相比Electron可能有什么不同?
由Electron发送的请求:
Request body
Electron 上传功能:https://github.com/RuurdBijlsma/MovieMaker/blob/master/movie-maker/src/plugins/vuex/auth-module.js#L69

async uploadVideo({commit, getters, rootState}) {
        console.log("Upload", filePath, service);
        commit('ytUpload', true);
        commit('ytDone', false);
        commit('ytProgress', 0);
        commit('ytUrl', '');

        let filePath = 'C:/Users/Ruurd/Videos/soep.mp4';
        let fileSize = fs.statSync(filePath).size;
        let title = 'What up gang my new rocet league video here';
        console.log("Uploading", title);
        let res = await service.videos.insert({
            auth: getters.oauth,
            part: 'snippet,status',
            resource: {
                snippet: {
                    title,
                    description: 'how u doing'
                },
                status: {
                    privacyStatus: "unlisted"
                },
            },
            media: {
                mimeType: 'video/mp4',
                body: fs.createReadStream(filePath)
            },
        }, {
            onUploadProgress: function (e) {
                console.log('progress', e.bytesRead / fileSize);
            }
        });
        console.log(res);
    },
NodeJS上传代码:https://gist.github.com/RuurdBijlsma/bad525ce011a0d08eeece6e02a7d1c5b
async function upload() {
authorize();
let filePath = 'C:/Users/Ruurd/Videos/soep.mp4';
let fileSize = fs.statSync(filePath).size;
let service = google.youtube('v3')
let title = 'test1' + Math.random();
console.log("Uploading", title);
let res = await service.videos.insert({
    auth: oauth2Client,
    part: 'snippet,status',
    resource: {
        snippet: {
            title,
            description: 'test'
        },
        status: {
            privacyStatus: "unlisted"
        },
    },
    media: {
        mimeType: 'video/mp4',
        body: fs.createReadStream(filePath)
    },
}, {
    onUploadProgress: function (e) {
        console.log(e.bytesRead / fileSize);
    }
});
console.log(res);
}

最佳答案

我最终将上载功能移到了 Electron 应用程序的主要过程中,现在可以使用了。虽然不确定为什么需要这样做,但我在渲染器中使用了许多其他仅Node包(express,fluent-ffmpeg,electron-context-menu),并且可以通过在electronBuilder配置中将它们声明为Node包来使用它们(外部)
imo不是一个很好的解决方案,但它现在可以使用。我仍然觉得完全上传失败而没有任何错误或警告仍然很奇怪

关于node.js - 在 Electron 版本中,YouTube API上传返回状态200,并且没有错误,但没有上传。相同的代码可在常规NodeJS项目中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65343408/

相关文章:

node.js - 如何使用 node.js superagent 发布 multipart/form-data

php - 如何在没有手动授权的情况下从 php 脚本访问我的谷歌驱动器

javascript - 在方法内声明时 eventListener 会被覆盖

javascript - 开发一个在 Electron 或 JS 中始终位于顶部的粘性组件

mysql - Node mysql 查询未从查询外部更新变量

php - AES-256-CBC 加密在 golang 和 node/php 之间不匹配

c# - 将 google 凭据用于生产应用程序的最佳方式是什么?

heroku - 在 ngrok 开发环境中使用 SSL 证书

reactjs - 无法在渲染过程Electron上连接到NeDB

javascript - 有没有办法将 json 对象转换为 json l 文件