Inicial > Tutoriais > Múltiplos uploads com asp.net + jquery

Múltiplos uploads com asp.net + jquery

Pesquisando a respeito de como fazer múltiplos uploads em asp.net, me deparei com o um excelente tutorial em inglês: Upload Multiple Files in ASP.NET using jQuery, resolvi traduzi-lo e dar uma customizado em alguns detalhes.

Criei um web site no VS 2008 framework 2.0. No link do tutorial em inglês encontra-se os links necessários dos scripts e projetos, porem, basta clicar aqui e efetuar o download do meu projeto de exemplo que contem todos os arquivos necessários.

1 – Criei um novo web site: “File > New > Web Site …”, agora crie as seguintes pastas: imagens, img, js. Dentro da pasta js crie a pasta: multiple_upload (essa estrutura é opcional), deve ficar igual a imagem abaixo.

2 – Na pasta img adicione a imagem “deletar.gif”, na pasta multiple_upload adicione os arquivos “jquery-1.3.2.js” e “jquery.MultiFile.js”. Esses arquivos podem ser encontrados no projeto que disponibilizei para download.

3 – No arquivo Default.aspx adicione o código(explicarei sobre o código logo abaixo do mesmo):

<head runat="server">

    <title>Upload múltiplo | asp.net + jquery</title>

    <script src="js/multiple_upload/jquery-1.3.2.js" type="text/javascript"></script>
    <script src="js/multiple_upload/jquery.MultiFile.js" type="text/javascript"></script>

    <style type="text/css">
        .divUpload{height:150px; width:400px; padding:5px; overflow:auto; border:solid 1px #333333}
        .mensagem{margin:0px; height:22px}
    </style>

</head>
<body>
    <form id="form1" runat="server">

        <div class="divUpload">
            <asp:FileUpload ID="fileUp" runat="server" class="multi" />
        </div>

        <p class="mensagem">
            <asp:Label ID="lblMensagem" runat="server" Visible="false"></asp:Label>
        </p>

        <asp:Button ID="btnUpload" runat="server" Text="Upload todos" onclick="btnUpload_Click" />

    </form>
</body>

Não há nada d+ nesse código, no head colocamos as referencias para os scripts que estão na pasta “js/multiple_upload”, logo abaixo temos um pequeno css para o bloco de upload, dentro do body temos um FileUpload, um label para dizer ao usuário quantos arquivos foram adicionados e um botão para enviar os arquivos.

4 – Agora no arquivo Default.aspx.cs, vamos adicionar o evento click do botão e colocar dentro dele o código para o upload dos arquivos, deve ficar algo parecido com isso:

    protected void btnUpload_Click(object sender, EventArgs e)
    {
        int cont = 0;
        try
        {
            HttpFileCollection hfc = Request.Files;
            for (int i = 0; i < hfc.Count; i++)
            {
                HttpPostedFile hpf = hfc[i];
                if (hpf.ContentLength > 0)
                {
                    hpf.SaveAs(Server.MapPath("~/imagens/" + hpf.FileName));
                }
                cont++;
            }

            if (cont > 0)
            {
                lblMensagem.Visible = true;
                lblMensagem.Text = cont.ToString() + " arquivos adicionados.";
            }
        }
        catch (Exception ex)
        {
            lblMensagem.Visible = true;
            lblMensagem.Text = "Ops! Algo deu errado!";
        }
    }
 

O sistema de upload funciona da seguinte maneira, toda a vez que se busca um arquivo pelo fileupload, o javascript adiciona outro controle fileupload na tela em cima do que já existe, então temos a impressão de sempre usar o mesmo fileupload. Então usamos a classe HttpFileCollection que disponibiliza acesso, como uma coleção de ficheiros, a todos os ficheiros que são transferidos. Caso a página permita a transferência de mais de um ficheiro (recorrendo a vários controles fileupload), então esta coleção pode ser percorrida para obter informação sobre cada um dos ficheiros. Já a classe HttpFileCollection Fornece Acesso a arquivos individuais que foram carregados por um cliente. Então criei um loop para percorrer a coleção de ficheiros e adicioná-los um a um na pasta “imagens”. Usamos um contador para mostrar o resultado para o usuário.

5 – Muito bem, o sistema já está pronto, agora vamos customizar um pouco as saídas dos scripts (traduzir as mensagens de inglês para português e melhorar um pouco a exibição dos arquivos adicionados). No arquivo jquery.MultiFile.js, vá até a linha de número 295, e deixe o código assim:

//CÓDIGO NOVO
         r = $('<div style="font-size: 13px; padding: 2px; text-align: left; border-bottom: solid 1px #cccccc" class="MultiFile-label"></div>'),
         v = String(slave.value || ''/*.attr('value)*/),
         a = $('<span class="MultiFile-title" title="'+MultiFile.STRING.selected.replace('$file', v)+'">'+MultiFile.STRING.file.replace('$file', v.match(/[^\/\\]+$/gi)[0])+'</span>'),
         b = $('<span> - </span><a class="MultiFile-remove" title="Remover" href="#'+MultiFile.wrapID+'"><img alt="Remover" style="border: 0px; vertical-align: bottom" width="15" height="15" src="img/deletar.gif">'+/*Remover+MultiFile.STRING.remove+'*/'</a>');

         //CÓDIGO ANTIGO
         //r = $('<div class="MultiFile-label"></div>'),
         //v = String(slave.value || ''/*.attr('value)*/),
         //a = $('<span class="MultiFile-title" title="'+MultiFile.STRING.selected.replace('$file', v)+'">'+MultiFile.STRING.file.replace('$file', v.match(/[^\/\\]+$/gi)[0])+'</span>'),
         //b = $('<a class="MultiFile-remove" href="#'+MultiFile.wrapID+'">'+MultiFile.STRING.remove+'</a>');

        // Insert label
        MultiFile.list.append(
         //CÓDIGO NOVO
         r.append(a, ' ', b)

Agora vá na linha 497:

//CÓDIGO NOVO
		STRING: {
			remove:'x',
			denied:'You cannot select a $ext file.\nTry again...',
			file:'$file',
			selected:'Arquivo selecinado: $file',//File selected:
			duplicate:'Esse arquivo ja foi selecionado.\n$file'//This file has already been selected:
		},

		//CÓDIGO ANTIGO
		//STRING: {
			//remove:'x',
			//denied:'You cannot select a $ext file.\nTry again...',
			//file:'$file',
			//selected:'File selected: $file',
			//duplicate:'This file has already been selected:\n$file'
		//},

Observe que eu comentei os códigos originais e fiz umas modificações no html gerado pelo javascript, comente a modificação e depois tire o comentário do código antigo para ver a diferença.

Bom, é isso, até o a próxima!

  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário