0

私のasp.Net MVCアプリは、データベース内のレコードごとにユーザーが選択したPDFファイルを表すバイト配列を保存する必要があります。SQL 列は Varbinary(max) です。

私が考えているアプローチは、Telerik の (最も素晴らしい) KendoUI Upload コントロールを使用して、選択した PDF をコントローラー メソッドに非同期的にアップロードすることです。コントローラー メソッドは、System.IO 名前空間のクラスを使用して PDF をバイトに変換し、Json の結果でそのバイト配列を返します。この結果を待機するページにイベント ハンドラーがあり、そのバイト配列を非表示の入力に書き込みます。ユーザーが保存ボタンをクリックすると、残りのレコードと共に保存され、フォームがサーバーにポストされます。 .

私の直感では、ここには厄介な非効率性があると感じています...

  1. PDF がサーバーに送信されます (おそらく、アップロード コントロールによって作成された何らかの形式のバイト配列で既に送信されています)。

  2. アップロード メソッドの結果はバイト配列をページに返します。

  3. ページは、データベースに保存されるバイト配列を含むフォーム ポストバックを送信します。

私の考えでは、ここで必要なネットワーク トラフィックはステップ 3 だけです。代わりにクライアントで PDF ドキュメントからバイト配列への変換を行う方法はありますか? これを行う賢い JavaScript/jQuery はどれでしょうか?

4

1 に答える 1

3

ここ:

コントローラー メソッドは、System.IO 名前空間のクラスを使用して PDF をバイトに変換し、Json の結果でそのバイト配列を返します。この結果を待機するページにイベント ハンドラーがあり、そのバイト配列を非表示の入力に書き込みます。ユーザーが保存ボタンをクリックすると、残りのレコードと共に保存され、フォームがサーバーにポストされます。 .

このロジックを次のように変更します。

コントローラー メソッドは、System.IO 名前空間のクラスを使用して PDF をバイトに変換し、それをデータベースに保存して、Json の結果を返します。この操作の成功または失敗を示します。隠しフィールドやバイト配列はもうありません。クライアントがフォームを送信すると、ファイルはサーバーに送信されなくなります。これは、ファイルが既に送信されてデータベースに保存されているためです。そのため、フォーム送信を処理するコントローラー アクションで、他のフォーム フィールドをデータベース レコード内のファイルに関連付けます。

于 2012-07-12T15:04:51.600 に答える