如何将ASP.net webform上传的文件存储到sql server 2005 varbinary(max)字段中?
这是我到目前为止所做的:
protected void btnUpload_Click(object sender, EventArgs e)
{
for (int i = 0; i < Request.Files.Count; i++)
{
StoreFile(Request.Files[i]);
}
}
private void StoreFile(HttpPostedFile file)
{
// what do i do now?
}
一个普通的旧ado.net示例会很好。一个linq to sql例子也是如此。
由于
答案 0 :(得分:3)
有关如何将文件直接上传到数据库的精彩教程 在4GuysFromRolla
答案 1 :(得分:2)
以下是我使用Linq To Sql执行此操作的方法:
FilesDataContext db = new FilesDataContext();
protected void btnUpload_Click(object sender, EventArgs e)
{
for (int i = 0; i < Request.Files.Count; i++)
{
StoreFile(Request.Files[i]);
}
db.SubmitChanges();
}
private void StoreFile(HttpPostedFile file)
{
byte[] data = new byte[file.ContentLength];
file.InputStream.Read(data, 0, file.ContentLength);
File f = new File();
f.Data = data;
f.Filename = file.FileName;
db.Files.InsertOnSubmit(f);
}
答案 2 :(得分:1)
这通常被视为不良形式。它使您的数据库膨胀,并没有真正提供任何优势,而不是将所有文件保存在硬盘驱动器文件夹中,只是将文件的位置存储在数据库中。你确定要这么做吗?
答案 3 :(得分:0)
这是罗尼回答的快速重构:
Public Shared Sub SaveUploadedFile(File As HttpPostedFile)
Dim oFile As Db.File
oFile = New Db.File
oFile.Data = File.ToBytes
End Sub
<Extension()>
Public Function ToBytes(File As HttpPostedFile) As Byte()
ToBytes = New Byte(File.ContentLength - 1) {}
Using oStream As Stream = File.InputStream
oStream.Read(ToBytes, 0, File.ContentLength)
End Using
End Function
HTH