ASP.NET Store загруженный файл sql server table - PullRequest
3 голосов
/ 18 апреля 2009

Как сохранить файл, загруженный веб-формой ASP.net, в поле varbinary (max) сервера sql server 2005?

Вот что у меня есть:

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 ]

3 голосов
/ 18 апреля 2009

Есть хороший урок о том, как загрузить файл непосредственно в базу данных. at 4GuysFromRolla

2 голосов
/ 18 апреля 2009

Вот как я это сделал, используя 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);
}
1 голос
/ 18 апреля 2009

Это обычно считается плохой формой. Он раздувает вашу базу данных и на самом деле не дает никаких преимуществ по сравнению с хранением всех файлов в папке на жестком диске и просто хранит местоположение файла в БД. Вы уверены, что хотите это сделать?

0 голосов
/ 26 июля 2013

Вот быстрый рефакторинг ответа Ронни:

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

НТН

...