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.