angularjs - 从 Electron 内部的angularJS SPA将电影上传到cloudinary

标签 angularjs node.js electron cloudinary

我想从用户光盘将文件从angularJS SPA的 Electron 应用程序的正面上传到cloudinary。
我已经通过从input[file]中选择照片来从angularJS上传照片,但是这次我想通过绝对路径将电影上传到用户光盘上的文件。
由于我使用 Electron ,因此我可以在顶层内使用nodeJS包作为path,因此,这是我用来定义.webm文件的路径的方法,因为它位于应用程序的根目录中。

$scope.uploadVideo = function () {

    var filePath = __dirname + '\\videos\\example.webm';
    console.log(filePath);

    $upload.upload({
        url: "https://api.cloudinary.com/v1_1/" + cloudinary.config().cloud_name + "/upload",
        data: {
            upload_preset: cloudinary.config().upload_preset,
            file: filePath
        }
    })
    .progress(function (info) {
        console.log(info);
    })
    .then(function (res) {
        console.log(res);
    });
};
filePath是:

C:\Users\Admin\Documents\ngb\desktopApp\videos\example.webm


这是文件的正确路径。但是上面的代码不起作用,并给出此错误:

Possibly unhandled rejection: {"data":{"error":{"message":"Unsupported source URL: C:\Users\Admin\Documents\ngb\desktopApp\videos\example.webm"}},"status":400,"config":{"method":"POST","transformRequest":[null],"transformResponse":


我想我无法通过绝对路径将文件从前端发送到云端电影,但我希望我错了。我也可以对 Electron 的nodeJS端进行相同的操作(实际上我已经尝试过并且正在工作),但是在nodeJS中,我没有这个.progress回调,它没有显示有关上载进度的当前信息,这有助于在前面创建一些Progressbar来显示剩余的时间。
问题是是否可以通过angularJS使用文件路径将其发送到cloudinary,如果不能,如何通过nodeJS获取上传进度。 编辑我已经为第二个问题创建了separate question Edit2 在进行更多谷歌搜索之后,我从cloudinary合作者那里发现information on github不能在服务器端上载进度,因此我在上面的链接中回答了我自己的问题。

编辑
因为错误是说他们不支持这样的路径,所以我放弃了在API调用中提供文件路径的想法。相反,我想将我的视频文件编码为base64格式,然后将其传递给cloudinary,因为他们说here是可能的:
$scope.uploadVideo = function () {

    var filePath = __dirname + '\\videos\\example.webm';
    var buff = Buffer.from(filePath).toString('base64');
    console.log(filePath);
    console.log(buff);

    $upload.upload({
        url: "https://api.cloudinary.com/v1_1/" + cloudinary.config().cloud_name + "/upload",
        data: {
            upload_preset: cloudinary.config().upload_preset,
            file: 'base64,' + buff
        }
    })
    .progress(function (info) {
        console.log(info);
    })
    .then(function (res) {
        console.log(res);
    });
};
但是它仍然不起作用。

C:\Users\Admin\Documents\ngb\desktopApp\videos\example.webm

QzpcVXNlcnNcQm9yeXNcRG9jdW1lbnRzXGlndFxkZXNrdG9wQXBwXHZpZGVvc1xleGFtcGxlLndlYm0=


和错误仍然相同:

Possibly unhandled rejection: {"data":{"error":{"message":"Unsupported source URL: base64,QzpcVXNlcnNcQm9yeXNcRG9jdW1lbnRzXGlndFxkZXNrdG9wQXBwXHZpZGVvc1xleGFtcGxlLndlYm0="}},"status":400,"config":{"method":"POST","

最佳答案

URI需要包括实际的文件内容,而不仅仅是路径。例如,使用formdata-

(function() {
    var f = document.getElementById('f');

    if (f.files.length)
        processFile();

    f.addEventListener('change', processFile, false);

    function processFile(e) {

        var f = document.getElementById('f');
        var file = f.files[0];

        console.log(file);
        var formdata = new FormData();

        formdata.append('file', file);
        //formdata.append('cloud_name', '<cloud_name>');
        formdata.append('upload_preset', '<upload_preset>');

        var xhr = new XMLHttpRequest();
        xhr.open('POST', "https://api.cloudinary.com/v1_1/<cloud_name>/upload",true);

        xhr.onload = function () {
            // do something to response
            console.log(this.responseText);
        };

        xhr.send(formdata);
    }
})();

关于angularjs - 从 Electron 内部的angularJS SPA将电影上传到cloudinary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51576213/

相关文章:

angularjs - 无法使用 Angular 读取未定义的属性 'get'

javascript - browserify 中立即调用表达式

javascript - 如果数据很大,JQuery ajax 不会在 POST 中发送完整数据

javascript - 在 Angular.js 中刷新模型时如何让选定的选项卡保持不变

javascript - Kendo UI Grid 重新加载数据错误

javascript - 未捕获的类型错误 : $rootScope. $on 不是连接工厂中的函数

node.js - 使用永远运行 Node 应用程序时出现问题

javascript - multer 文件上传不适用于 Node 窗口

javascript - 如何打印 console.log 中的最后一个数组项?

python - 无法从子进程激活Conda环境