質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

ASP.NET MVC 4

ASP.NET MVC4は、MVCパターンを利用して、高度なテスト機能と保守機能を備えた Web アプリケーションを開発するためのフレームワークです。

Q&A

解決済

1回答

1247閲覧

ASP.NET MVCでのファイルアップロードとDB更新

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

ASP.NET MVC 4

ASP.NET MVC4は、MVCパターンを利用して、高度なテスト機能と保守機能を備えた Web アプリケーションを開発するためのフレームワークです。

0グッド

0クリップ

投稿2022/01/20 11:09

ASP.NET MVC + .NET4.8です。

前提・実現したいこと

ASP.NET MVCのWEBアプリで、ファイルアップロードと同時にDB更新をする処理があります。
ファイルアップロードはJSから非同期でコントローラーメソッドを呼び出し
サーバー側の特定フォルダに格納し、画面の入力内容はモデルバインドで
モデルクラスに設定して、DB更新時にモデルの内容とサーバー側の特定フォルダに配置された
ファイルをStreamで読み込みバイト配列として、画面入力内容と一緒に同じレコードに格納するようにしています。

改善したいこと

画面を開いて入力項目に更新内容を入力し、ファイル参照ボタンからファイルを選択してアップロードを行い
submitでDB更新するまでの流れは問題なく動いています。
気になっているのは、アップロードを行ってサーバーにファイルが保存されたあとに、ブラウザを閉じて
処理を中断したケースです。

中断された場合、サーバーにはアップロードされたファイルだけが残る状態になります。
今のところは定期的にアップロード先のフォルダにあるファイルのうち、タイムスタンプが一定の日付より小さいものを
削除することで対応していますが、もっと良いやり方があるのではないかと考えています。

そこで、モデルクラスにバイト配列のメンバーを追加して、そのメンバーに設定するようにして
DB更新時はそのバイト配列も含め同じトランザクションで更新するようにしてみました。
このやり方は問題なく動作するのですが、ファイルサイズがある程度大きくなると
ビューに保持されているデータが大きくなりすぎて表示が遅くなります。

このようなやり方しか思いつかないのですが、もっと良い方法、あるは定石のようや実現方法はあるでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/01/20 12:57 編集

前のスレッドでも言いましたが、業務の一環としてやっているようですので、あなたの上司・先輩に相談してください。あなたの組織は製品品質を担保するためにあなたを教育する義務があります。なのでここで聞くのは筋違いです。 文章でやり取りする Q&A サイトと違って、質問が情報不足でも、Face-to-face で話をして何が知りたいかを理解してもらえて、あなたが期待する答えがもらえるはずです。(もらえなかったら組織としての教育義務を放棄しているということになるのでは?)
退会済みユーザー

退会済みユーザー

2022/01/20 13:04

ご回答ありがとうございます。参考にさせていただきます。
guest

回答1

0

ベストアンサー

ファイルサイズがある程度大きくなると
ビューに保持されているデータが大きくなりすぎて表示が遅くなります。

これは「登録は問題ないけど、その後の画面表示が重い」ということでしょうか。

もしそうだとすると、

  • 表示用モデル HogeViewModel と編集用 HogeEditViewModel を分ける
  • 画面表示時にはファイルデータのみクリアしてしまう、とか 不要なのであれがそもそも取得しない

とかでは駄目でしょうか


  • 「登録データとそれに付随する添付ファイル」のようなケースであれば、
    私は先にデータを登録して → レコードが出来た後にファイルをアップロードさせる、とすることも結構あります。
    この場合「レコードはあるが画像がない」という事はありますが、逆はありません。

  • ただ もし「あくまで画像がメインで、それについてのキャプションを登録する」とかであれば
    画像の登録を先にするか、同時に post したいところではありますね。

投稿2022/01/21 01:39

sk_3122

総合スコア1126

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/01/21 08:58

コメントありがとうございます。なぜ「重い」のかに対する情報が不足していますね。申し訳ありません。 何も考えずに、CRUDそれぞれに対応するモデルに、画像に対応するバイト配列のメンバーを持たせて試してみたので、その結果すべてが重く(データ転送量が多く)なっていました。 なんとなく、メンテナンス画面だからそういうものだという意識のもとに、そのように対処していたのですが、おっしゃる通り、たとえば「画面表示時にはファイルデータのみクリアしてしまう、とか 不要なのであれがそもそも取得しない」なども対応策としてアリなのだとおもいます。 (あるいは、RUDに関してはサムネイル画像を生成して表示するとかでしょうか) いずれにせよ、大変参考になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問