1

ImageModifiedDate画像の最終変更日を保存するdatetimeプロパティを持つエンティティがあります。画像を変更した場合、このプロパティはどういうわけか自動的に更新されますか?つまり、このプロパティをファイル(画像)にバインドでき、実際のファイルが変更されたときに(自動的に)変更できますか?

これはasp.netmvc3アプリで必要ですが、c#の質問としてマークすることもできると思います。

編集済み:データベースではなく、ファイルストリームに画像を保存します

4

2 に答える 2

1

データベースの最終変更日を更新することと、データベースが変更されたことを知ってから変更を表示することの 2 つの部分に問題があるようです。

まず、Windows サービスまたはそのようなプログラムを作成し、FileSystemWatcher を使用してファイルの変更を監視します。その後、データベースを新しい情報で更新できます。

Web アプリケーションでの変更の表示に関しては、AJAX を介してアプリケーションをポーリングし、日付を表示する HTML を更新するだけです。これにより、日付が変わったときにページ全体を更新する必要がなくなります。

于 2013-02-19T14:25:09.130 に答える
1

画像を調べて、更新されているかどうかを確認するために、何らかのサービスが必要になる場合があります。次のようにする必要があります。

foreach (var image in dbcontext.Images)
{
    var filename = image.Filename;
    var lastModified = System.IO.File.GetLastWriteTime(filename);

    if (lastModified != image.LastModified) 
    {
        image.LastModified = lastModified;        
    }
}

dbcontext.SaveChanges();

トレードオフの決定を行う必要があることに注意してください。常に実行することはできますが、サーバーの速度が低下します。または、画像の数とプロセスの完了にかかる時間に応じて、毎分または 5 分ごとに実行できます。

または、これらの行に沿って何かを使用することもできますFileSystemWatcher(このコードはまだテストしていませんが、始めるには十分です):

FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = "your path here";
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
watcher.Filter = "*.jpg";

watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);


private static void OnChanged(object source, FileSystemEventArgs e)
{
    // Specify what is done when a file is changed, created, or deleted.
   Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}

private static void OnRenamed(object source, RenamedEventArgs e)
{
    // Specify what is done when a file is renamed.
    Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
}    
于 2013-02-19T14:25:38.647 に答える