ImageModifiedDate
画像の最終変更日を保存するdatetimeプロパティを持つエンティティがあります。画像を変更した場合、このプロパティはどういうわけか自動的に更新されますか?つまり、このプロパティをファイル(画像)にバインドでき、実際のファイルが変更されたときに(自動的に)変更できますか?
これはasp.netmvc3アプリで必要ですが、c#の質問としてマークすることもできると思います。
編集済み:データベースではなく、ファイルストリームに画像を保存します
ImageModifiedDate
画像の最終変更日を保存するdatetimeプロパティを持つエンティティがあります。画像を変更した場合、このプロパティはどういうわけか自動的に更新されますか?つまり、このプロパティをファイル(画像)にバインドでき、実際のファイルが変更されたときに(自動的に)変更できますか?
これはasp.netmvc3アプリで必要ですが、c#の質問としてマークすることもできると思います。
編集済み:データベースではなく、ファイルストリームに画像を保存します
データベースの最終変更日を更新することと、データベースが変更されたことを知ってから変更を表示することの 2 つの部分に問題があるようです。
まず、Windows サービスまたはそのようなプログラムを作成し、FileSystemWatcher を使用してファイルの変更を監視します。その後、データベースを新しい情報で更新できます。
Web アプリケーションでの変更の表示に関しては、AJAX を介してアプリケーションをポーリングし、日付を表示する HTML を更新するだけです。これにより、日付が変わったときにページ全体を更新する必要がなくなります。
画像を調べて、更新されているかどうかを確認するために、何らかのサービスが必要になる場合があります。次のようにする必要があります。
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);
}