2016-04-11 56 views
0

我想让我的base64视频数据保存到Parse.com。我对图像使用相同的技术,并且工作正常,但由于某些原因,视频不会保存。我一直在尝试调试这个问题数周,但没有成功。我基本上是复制的技术/代码后,我不得不图片以这种方式工作......使用Base64我想这将是更多或更少的工作一样...将Base64视频上传到Parse.com - Javascript

我的视频数据是这样的:

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); 
    }); 
+0

“由于某种原因未保存”表明您没有进行太多调试(如果有的话)。你应该。而且,是的,它可能与图片相同,除了视频更大,base64编码将使它们更大。如果浏览器没有崩溃,您可能会遇到服务器端限制。 –

+0

比较文档https://parse.com/docs/js/api/classes/Parse.File.html到您提供给File构造函数的内容。你的数据属性似乎不匹配文档。 –

+0

你还可以在这里添加'_params'的值吗? – Uzbekjon

回答

0

HTTP状态代码400意味着你request is not formed correctly。您是否可以复制粘贴从DevTools或Firebug制作的实际HTTP请求。

另一方面,如果请求在完全相同的长度后被截断。这可能是由等式一侧的防火墙/路由器造成的。你是否支持企业网络?

UPDATE:

至于作者的评论的回应。有2种方式保存文件到Parse.com:

  1. 使用REST API
  2. 使用简单的HTTP POST请求

第一种方法

我更喜欢使用HTML5文件场为我处理文件。它允许用户选择一个文件。

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); 
 
});
<input id="your-file" type="file" />

第二种方法:

使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等编码?

+0

当我在我的chrome开发工具的响应部分探听更多时,我发现这个错误: {“code”:107,“error”:“base64字段无法解码”} 也许我要在这一切某处错了。有没有更好的方法来存储解析视频?我的应用程序是一款社交视频分享应用程序,Parse似乎是正确的选择,直到现在,一切都变得轻松而且有效。视频并不那么容易。 –

+0

我更新了我的答案。尝试使用第一个选项。 – Uzbekjon

+0

我正在为PhoneGap编码。这几乎是我已经安装了所有东西。我不能只使用输入HTML5元素,因为我使用ngCordova和用户的相机捕获它。 –