2016-04-11 54 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和用戶的相機捕獲它。 –