Pergunta

Como você armazenar um arquivo que foi carregado por um ASP.net webform em um campo sql server 2005 varbinary (max)?

Aqui está o que eu tenho até agora:

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?
}

A idade exemplo ado.net simples seria bom. Então, seria um LINQ to SQL exemplo.

Graças

Foi útil?

Solução

Não é bom tutorial sobre como fazer upload de um arquivo diretamente no banco de dados em 4GuysFromRolla

Outras dicas

Aqui está como eu fiz isso usando 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);
}

Este é geralmente considerado uma forma ruim. Ele incha seu banco de dados e realmente não oferecem quaisquer vantagens sobre manter todos os arquivos em uma pasta do disco rígido e apenas armazenar o local do arquivo no DB. Tem certeza de que quer fazer isso?

Aqui está uma refactor rápida da resposta de 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

HTH

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top