2016-04-11 17 views
0

私はBase64ビデオデータをParse.comに保存しようとしています。私は同じテクニックを画像に使用していますが、問題なく動作しますが、ビデオは何らかの理由で保存されません。私は成功していないこの問題を数週間デバッグしようとしてきました。Base64ビデオをParse.comにアップロード - Javascript

data:video/3gpp;base64,AAAAGGZ0eXAzZ3A0AAAAAGlzb2..... 
:私はこの方法を働いた画像を持っていた後、私は基本的に

マイビデオデータは次のようになります...私はそれが多かれ少なかれ仕事と同じだろう考え出しBASE64を使用して...技術/コードをコピー

保存されるビデオは〜56kb〜〜1mbです。ファイルサイズが10MBのParse.comに保存しています。私は私のデータをチェックしましたし、すべてが右のようで、右の私はParse.comにファイルを保存しようとするまで、私のXHRレスポンスでこれに伴ってエラー400

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

をバック吐くた:

それが動作していない可能性がなぜ
{"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のドキュメントを比較します。データプロパティがドキュメントと一致していないようです。 –

+0

'_params'の値をここに追加できますか? – Uzbekjon

答えて

0

HTTPステータスコード400は、あなたのことを意味request is not formed correctly。 DevToolsまたはFirebugからの実際のHTTP要求をコピーして貼り付けできますか?

他の点では、要求が完全に同じ長さの後に途切れている場合。これは、方程式のあなたの側にファイアウォール/ルータによって引き起こされる可能性があります。あなたは企業ネットワークの背後にいますか?

UPDATE:著者のコメントへの応答として

。 Parse.comにファイルを保存するには2通りの方法があります。

  1. 単純なHTTP POSTリクエスト

まず方法

を使用してREST APIを

  • を使用するが、私はに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" />

    第二の方法:

    そうやドキュメントhereを読むようなPOSTリクエストを行います。

    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リクエストでは、このカールに相当するだけです。ネイティブ環境でのコーディングはオプションですか?または、PhoneGap、Ionicなどをコーディングしていますか?

  • +0

    クロム開発ツールの[レスポンス]セクションでさらにスヌーピングしたところ、このエラーが見つかりました: {"code":107、 "error": "base64フィールドをデコードできません"} 多分私はこのすべてに行きますどこか間違っている。解析にビデオを保存するためのよりよい方法はありますか?私のアプリはソーシャルビデオ共有アプリであり、Parseは正しい選択のように思えましたが、今まではすべてが簡単で機能しました。ビデオはそれほど簡単ではありません。 –

    +0

    答えを更新しました。最初のオプションを使用してみてください。 – Uzbekjon

    +0

    私はPhoneGapをコーディングしています。それで私はすでにセットアップがすべて済んでいるのです。私はngCordovaとユーザのカメラを使ってキャプチャしているので、入力HTML5要素を使うことはできません。 –

    関連する問題