3

如何将 ASP.net 网络表单上传的文件存储到 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 示例也是如此。

谢谢

4

4 回答 4

3

关于如何将文件直接上传到4GuysFromRolla的数据库中有很好的教程

于 2009-04-17T21:41:50.910 回答
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);
}
于 2009-04-18T14:10:24.793 回答
1

这通常被认为是不好的形式。它会使您的数据库膨胀,并且与将所有文件保存在硬盘驱动器文件夹中并仅将文件的位置存储在数据库中相比并没有真正提供任何优势。你确定你要这么做吗?

于 2009-04-17T21:21:51.707 回答
0

这是对 Ronnie 答案的快速重构:

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

高温高压

于 2013-07-26T00:02:53.390 回答