Mostrando postagens com marcador hash. Mostrar todas as postagens
Mostrando postagens com marcador hash. Mostrar todas as postagens

segunda-feira, 15 de abril de 2013

Upload e Download de arquivo com LINQ


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());
            }

        }







sexta-feira, 12 de abril de 2013

Criptografar senha

Aqui vai uma dica de como criptografar uma senha.

Eu particularmente utilizo um método um pouco peculiar mas que já vi várias pessoas utilizando.
No exemplo abaixo eu concateno  usuário e senha criando um Hash com essa informação. veja o exemplo:


using System.Security.Cryptography;


public static string AcertaSenha(string _login, string _senha)
{
    StringBuilder senha = new StringBuilder();

    MD5 md5 = MD5.Create();
    byte[] entrada = Encoding.ASCII.GetBytes(_login + "//" + _senha);
    byte[] hash = md5.ComputeHash(entrada);
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < hash.Length; i++)
    {
senha.Append(hash[i].ToString("X2"));
    }
    return senha.ToString();
}

Se eu passar o usuário "celso" e a senha "12345" o resultado será:
321F8F2C95B3AE3F5B9DAD4B58CF1819

em outra situação, se eu passar o usuário "CELSO" e a senha "12345" o resultado será:
5B105E94EB8276DB9738A92AFF8A490F


:)