将Base64视频上传到Parse.com - Javascript

时间:2016-04-11 10:50:04

标签: javascript angularjs cordova parse-platform video-capture

我试图将我的base64视频数据保存到Parse.com。我对图像使用了相同的技术并且工作正常,但视频由于某种原因无法保存。我已经试图将这个问题调试好几周而没有成功。在我以这种方式工作之后,我基本上复制了技术/代码...使用base64我认为它会或多或少地工作相同...

我的视频数据如下所示:

data:video/3gpp;base64,AAAAGGZ0eXAzZ3A0AAAAAGlzb2.....

保存的视频仅为~56kb - ~1mb。保存到Parse.com,文件限制为10mb。我检查了我的数据,一切似乎都正确,直到我尝试将文件保存到Parse.com,后者吐出错误400.

POST https://api.parse.com/1/files/myVideo.3gp 400 (Bad Request)

以及我在XHR响应中的内容:

{"code":107,"error":"base64 field cannot be decoded"}

任何人都知道为什么它可能无法正常工作:

var videoFile = new Parse.File('myVideo.3gp', {
    base64: _params.videoData
});

// save the parse file
videoFile
    .save({
        success: function(resp) {
            window.ERROR = "Success: " + resp;
        },
        error: function(e, r) {
            window.ERROR = "Error: " + e + " : " + r;
        }
    })
    .then(function() {

        _params.videoData = null;

        // create object to hold caption and file reference
        var videoObject = new ImageObject();

        // set object properties
        videoObject.set('title', _params.title);
        videoObject.set('user', Parse.User.current());
        videoObject.set('img', videoFile);

        if (_params.location !== undefined) {
            videoObject.set('location', new Parse.GeoPoint(_params.location.latitude, _params.location.longitude));
        }

        // save object to parse backend
        videoObject
            .save()
            .then(function(resp) {
                console.log('Posted Video', resp);
                // Add User QtdPhoto
                defer.resolve(resp);
            });

    }, function(error) {
        console.log('Error', error);
        defer.reject(error);
    });

1 个答案:

答案 0 :(得分:0)

HTTP状态代码400表示您的request is not formed correctly。您可以复制粘贴从DevTools或Firebug生成的实际HTTP请求。

另一方面,如果请求在完全相同的长度后被切断。它可能是由您方程式的防火墙/路由器引起的。你是企业网络的幕后推手吗?

<强>更新

作为对作者评论的回应。有两种方法可以将文件保存到Parse.com:

  1. 使用REST API
  2. 使用简单的HTTP POST请求
  3. 第一种方法

    我更喜欢使用HTML5文件字段为我处理文件。它允许用户选择文件。

    &#13;
    &#13;
    var videoFile = document.getElementById("your-file");
    
    if (videoFile.files.length > 0) {
      var parseFile = new Parse.File("myVideo.3gp", videoFile.files[0]);
    }
    
    parseFile.save().then(function() {
      // Success
    }, function(error) {
      // Error: alert() or log()
      console.log(error);
    });
    &#13;
    <input id="your-file" type="file" />
    &#13;
    &#13;
    &#13;

    第二种方法:

    发出类似的POST请求或阅读文档here

    curl -X POST \
      -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
      -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
      -H "Content-Type: video/3gp" \
      --data-binary '@your-local-file.3gp' \
      https://api.parse.com/1/files/videoFile.3gp
    

    在AJAX请求中执行相当于此curl的操作。在本机环境中编码是一种选择吗?或者,您是否正在为PhoneGap,Ionic等编码?