Fazer um upload de um arquivo qualquer para o banco de dados
através do LINQ é muito fácil.
Criei em meu banco de dados uma tabela chamada documento,
com os seguintes campos:
Tipo de dados:
Id – Uniqueidentifier
Nome – Varchar(max)
Arquivo – Image
Adicionei ao projeto um arquivo do tipo LINQ to SQL com o nome de
Banco.dbml e adicionei a tabela
documento.
Feito isso, precisamos criar a página que irá enviar o
arquivo. No meu caso é a Default.aspx. veja como ficou o código:
<%@
Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="ExemploWeb._default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="UpArquivo" runat="server" />
<br />
<asp:Button ID="BtnEnviar" Text="Enviar" runat="server"
onclick="BtnEnviar_Click" />
</div>
</form>
</body>
</html>
O controle “asp:FileUpload” é necessário para fazer o
upload e o controle do tipo Button que
irá realizar toda mágica. Repare que eu
adicionei um evento chamado onClick e apontei para a função “BtnEnviar_Click”. Essa função deverá ser criada no arquivo Default.aspx.cs.
Veja abaixo:
protected
void BtnEnviar_Click(object
sender, EventArgs e)
{
if (UpArquivo.HasFile &&
UpArquivo.PostedFile.ContentLength > 0)
{
byte[] _arquivo = UpArquivo.FileBytes;
BancoDataContext bd = new BancoDataContext();
documento doc = new documento();
doc.id = Guid.NewGuid();
doc.nome = UpArquivo.FileName;
doc.arquivo = _arquivo;
bd.documentos.InsertOnSubmit(doc);
bd.SubmitChanges();
}
}
No exemplo acima eu armazenei o arquivo, em formato de bytes, na variável _arquivo.
Após armazenar o arquivo foi criado um
Contexto do meu banco de dados, dei o nome de bd. Esse contexto vem do LINQ e é responsável pela ligação do C#
com o SQL.
Criei uma nova instancia do objeto documento e atribuir os
valores, id, nome e arquivo.
O método InsertOnSubmit é responsável por guardar o objeto
em cache até executar o submit, que é o método SubmitChanges, Até esse momento
o registro ainda não existe no banco de dados.
Veja como ficou:
Clicando no botão “Escolher arquivo” a seguinte janela será
exibida:
Vou escolher esse arquivo PDF e clicar em open.
Feito isso é só clicar em enviar. O resultado já pode ser visto no banco de
dados.
Para realizar o Download do arquivo basta colocar esse
trecho de código no evento do botão download, que pode ser criado exatamente
como o botão enviar.
protected
void BtnDownload_Click(object
sender, EventArgs e)
{
BancoDataContext bd = new
BancoDataContext();
var arquivos = from c
in bd.documentos select
c;
foreach (documento
arquivo in arquivos)
{
Response.AddHeader("Content-Disposition", "attachment; filename=" + arquivo.nome);
Response.ContentType = "application/x-zip-compressed";
if (arquivo.arquivo != null)
Response.BinaryWrite(arquivo.arquivo.ToArray());
}
}
pode disponibilizar para download ?
ResponderExcluir