2016-11-09 24 views
-2

C#WebAPIを呼び出して暗号化してからSQL DBに格納する大容量ファイル(1〜3GB)をアップロードするJS/HTML5フロントエンドがあります。WebApi経由で大容量ファイル(1〜3GB)をアップロード

私の制限は、ファイルを暗号化せずに保存することができず、SQLの外に保存することができないということです。 SQL FileStreamも使用できません。

WebAPIについては、WebHostBufferPolicySelectorをオーバーライドしてBufferStreamを無効にして、メモリの例外を処理しました。これにより、メモリフットプリントを大幅に増やすことなくファイルをディスクに直接アップロードすることができます。

ファイルを構成する一連の暗号化されたチャンクを、SQLテーブルの行に順番に格納したいとします。その後、チャンクを取り出して解読し、リクエストされたときにそれらをユーザーに戻すことができました。

私はマルチデータ部分メッセージを受け取り、チャンクを暗号化し、データベースの行に書き込む方法がわかりません。誰かが私のやり方を正しい方向に向けることができますか?

+0

大きなファイルはDBに格納されず、ファイルシステムに格納され、ファイルへのパスはDBに格納されます。 – zaph

+0

@zaph - 私は一般にファイルがデータベースに保存されていないことを理解します。残念ながら、私は私が働いているものの要件を書くことはできません。 上記のように、私はFileStreamの使用について考えましたが、ファイルをメモリにロードせずに暗号化できるとは思っていませんでしたので、私はそれに反対しました(大きな理由は、 私は個々のチャンクを保存し、それぞれのチャンクを暗号化することを考えました。 – JakeHova

+0

次の問題は、暗号化キーがどのように保護されるかです。これは、DBへの管理者アクセス権を取得した人物から秘密にされています。 – zaph

答えて

0

OK。つまり、RAMを使い果たしていないWebAPIの問題を解決しました。しかし、次の懸念は、データをSQL Serverに渡す必要があることです。要求ストリームを.NETストリーム暗号化装置のいずれかを介してパイプすることができますが、その後はどこかに行く必要があります。カスタムストリームがチャンクでSQL Serverにデータを送信するための責任を負うことになります>カスタムストリーム

- >暗号化 -

要求ストリーム:

は、私はあなたのような何かを示唆しています。チャンクのサイズを微調整することはできますが、1GB以上の引数サイズを持つsqlコマンドを送信しないようにすることが基本的です。あなたのカスタムストリームのsqlコマンドは、固定のバッファサイズを指定すると、アップロードをバイトのチャンクに分割します。バッファが一定量以上になると、SQL Serverに行を書き込み、バッファをフラッシュして、暗号化ストリームからより多くのデータが入るのを待ちます。書かれた行は、何らかの種類のIDと一緒に結び付けられます。もちろん、それらを再組み立てするときに使用する順序を示すシーケンス番号もあります。

データを送り返したい場合は、これをもう一度やり直してください。逆です。

+0

これは私が必要とするものとまったく同じように聞こえます。それをどうやって行うのか分かりません。これを行うには、実際のファイルストリームにアクセスするためにGetStream of MultiStreamProviderをオーバーライドすると思います。その方法では、私はそれを暗号化するために暗号ストリームを介して要求ストリームを実行します。その後、オーバーライドされたGetStreamメソッドでは、暗号ストリームを入力として受け取る新しいカスタムストリームインスタンスを作成し、カスタムストリームの書き込み実装で​​はストリームをSQLに書き込みます。それは正しいと思いますか?バッファ監視はどのように行いますか? ありがとうございます! – JakeHova

+0

あなたはこれの要点を持っていると思います。カスタムストリームのdisposeメソッド内のバッファ内のデータがあるかどうかを確認してください。私は本当にあなたが監視している限りあなたが探しているものはよく分かりません。 –

+0

私はこのプロセスの大半を持っていると私は信じて、これにフォローアップの投稿を持っています。私が今行っている問題は、適切にダウンロードするためにファイルを再アセンブルできないことです。私はここで一緒に置くものを見て気になりますか:[新しいstackoverflowの質問](http://stackoverflow.com/questions/40616670/large-file-download-from-sql-via-webapi-after-custom-multipartformdatastreamprov ?noredirect = 1&lq = 1) – JakeHova

関連する問題