ASP NET - FileUpload

O Controle FileUpload é muito util para a transferência de arquivos do lado do cliente para o lado do servidor, ou seja, para envio de documentos ao site.

É um recurso muito útil pois poupa muito tempo...é o mesmo que colocar uma carta no correio ou enviar um e-mail. Nem compara tempo, eficiência e custo.

Contudo representa um risco grande de segurança ao servidor. O usuário pode nem saber e enviar um arquivo infectado por vírus para o servidor. Mesmo com todas as restrições de tipo de arquivo nada garante que não venha um arquivo com vírus. A culpa é da própria Microsoft que permitiu anexar arquivos ( desde o DOS 1.0 ) de tipos diferentes e, sendo assim, posso anexar um arquivo .exe (vírus) num arquivo texto e, analisando o arquivo, parece um arquivo texto simples.

O controle File-Upload precisa de 2 operações básicas para enviar o arquivo por este controle, o primeiro é a escolha do arquivo e a segunda é clicar no botão de envio de arquivo.

Para realizar a primeira opção ele tem um botão para escolha do arquivo.

Logo à direita do botão de escolha do arquivo temos um campo texto para o nome do arquivo. Se nenhum arquivo ainda foi selecionado, neste campo, será exibida a mensagem 'Nenhum arquivo escolhido'. Se um arquivo for selecionado o seu nome será exibido neste texto.

Um segundo botão fará o processo em si de envio do arquivo.

Colocarei os campos e botões com fundo diferente, uma boa padding e borda para denotar cada elemento.
Em azul claro é o controle FileUpload em Si. Em Verde claro é o botão enviar. Em pink é a mensagem se o arquivo foi ou não enviado.

Exemplo de uso :              

Código:
<p>
            Exemplo de uso :
            <span style="background-color:lightblue;padding:20px;border:1px solid blue">
                <asp:FileUpload ID="FileUpload1" runat="server" />
            </span>
                   
            <span style="background-color:lightgreen;padding:20px;border:1px solid blue">
                <asp:Button ID="btnenviar" runat="server" onclick="btnenviar_Click" Text="Enviar" style="width:80px" CssClass="FundoAzulClaro" />
            </span>
                   
            <span style="background-color:pink;padding:20px;border:1px solid blue">
                <asp:Label ID="lblmsg" runat="server" CssClass="FundoPink" />
            </span>
        </p>


Protected Sub btnenviar_Click(sender As Object, e As EventArgs)
        If FileUpload1.HasFile Then
            Dim nomeArquivo As String = FileUpload1.PostedFile.FileName
            Dim tamanhoArquivo As Long = FileUpload1.PostedFile.ContentLength
            'FileUpload1.PostedFile.SaveAs(Server.MapPath("~/Imagens/" + nomeArquivo))
            lblmsg.Text = "Arquivo enviado com sucesso." & vbCrLf & "Tamanho do Arquivo = " & tamanhoArquivo.ToString() & "bytes"
        Else
            lblmsg.Text = "Por Favor, selecione um arquivo a enviar."
        End If
    End Sub

Importante1 : Coloquei um comentário na linha que executa o upload do arquivo:
'FileUpload1.PostedFile.SaveAs(Server.MapPath("~/Imagens/" + nomeArquivo))
O arquivo iria ser enviado para a subpasta Imagens do root do site.
Você deverá ajustar esta pasta para o seu site provavelmente.

Importante2 : Por motivos de segurança não é permitido enviar outros conteúdos junto com o arquivo.
Explicando melhor, poderíamos no click do botão fazer o file-upload e dar um submit no form para enviar os dados dos controles ao servidor. Isto não é permitido...ou vai o arquivo ou vai os dados dos controles para o servidor.

No form que está enviando o arquivo é definido um parâmetro especial de envio de arquivos :
enctype='multipart/form-data'
Isto faz com que o form só envie o arquivo, nada de dados de controle.

Importante3 : No asp net não podemos ter 2 forms e por esse motivo não será possível fazer um form para file upload e outro para enviar dados dos controles ao servidor. Isto foi feito propositalmente por motivos de segurança.