Microsoft SQL Server2008を使用してEntityFramework上に構築されたASP.NETMVCソリューションがあります。ユーザーがファイルをアップロードできるようにする関数を作成する必要があります。
私が欲しいのは:
SQL Server 2008データベースにファイルを格納する「正しい」方法は、 FILESTREAMデータ型を使用 です。 Entity Frameworkがそれをサポートしていることはわかりませんが、実際に何が起こるか試してみることができます。
とは言うものの、人々がこれを行うほとんどの場合、彼らはファイルをデータベースに保存しません。そうすることは、Webサーバーから直接提供できるファイルを提供するためだけにASP.NETとデータベースサーバーを経由する必要があることを意味します。また、データベースとサイトのバックアップ画像が多少複雑になる可能性もあります。そのため、MVC/Entity Frameworkにファイルをアップロードするときは、ファイルの場所への参照のみをデータベースに保存し、ファイル自体を別の場所に保存します。
明らかに、どの戦略があなたに適しているかは、アプリケーションの詳細に大きく依存します。
エンティティモデルで、BLOBデータベース列をbyte[]
プロパティにマップします。アップロードされたファイルのコンテンツをエンティティオブジェクトのそのプロパティに割り当て、変更をObjectContext
に保存します。
ハッシュを計算するには、 MD5CryptoServiceProvider
クラスを使用できます
これが私がポッドキャストのためにそれをする方法です:
IDタイトルパスの概要UploadDate --- ----- -------- -------------- ------------ 1 TestPodcast/Podcasts/ep1.mp3テストポッドキャスト2010-02-12
path
は、ポッドキャストの物理的な場所への参照を格納します。私はScottHanselmanからの投稿を使用して ASP.NET MVCを使用したファイルアップロード ファイルアップロード部分を処理しました。
@Thomasの回答に基づく実用的な例(これはGoogleで最初に来るため、ファイルのアップロードのみ):
public void AddDocument(HttpPostedFileBase file)
{
try
{
using (TransactionScope scope = new TransactionScope())
{
try
{
using (var ctx = new Entities())
{
EntityDoc doc = new EntityDoc(); //The document table
doc.DocumentFileName = file.FileName; //The file Name
using (var reader = new System.IO.BinaryReader(file.InputStream))
{
doc.DocumentFile = reader.ReadBytes(file.ContentLength); // the Byte [] Field
}
ctx.EntityDocs.Add(doc);
ctx.SaveChanges();
scope.Complete();
}
}
catch (Exception ex)
{
throw ex;
}
}
}
catch (Exception ex)
{
throw ex;
}
}