Quem trabalha com o controle FileUpload, sabe deste problema, quando o usuario tenta colocar arquivos com mais de 4mb de tamanho exibe um erro, dizendo que o tamanho máximo para upload foi excedido, não sendo possivel fazer o upload do arquivo, este valor pode ser alterado, porém, pode acontecer da aplicação ficar instavel, pois a alteração que será feita vai alterar a quantidade de acessos, o tempo de execução das páginas e etc.
O Jeito simples e rápido de consertar esta falha é alterando o Web.Config inserindo esta tag:
<system.web>
<httpRuntime executionTimeout="240" maxRequestLength="20480" />
</system.web>
Tornando assim sua aplicação com um tempo de execução maior e permitindo arquivos de aproximadamente 20mb, lembrando que acarretará no problema da performance;
Após esta alteração seria interessante exibir ao usuario que o maximo permitido é o valor que está setado por voce, para isso utilizar esta maneira que é a mais simples:
System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
HttpRuntimeSection section = config.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
double maxFileSize = Math.Round(section.MaxRequestLength / 1024.0, 1);
FileSizeLimit.Text = string.Format("Make sure your file is under {0:0.#} MB.", maxFileSize);
Uma outra maneira é utilizar componentes como:
FileUploader.Net (Pago) - (link)
RadUploader (Pago)- (link)
NeatUploader (Até o momento Gratis) - (link)
Um outro controle muito legal é o SWFUpload (link)
Upload de diversos arquivos
Aqui está um código-fonte para upload de diversos arquivos na mesma página.
<%@ Page Language="C#" AutoEventWireup="false" %>
<!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>
<title>File upload test</title>
</head>
<body>
<form id="form1" runat="server" enctype="multipart/form-data">
<p id="upload-area">
<input type="file" runat="server" size="60" />
</p>
<p><a href="#" onclick="addFileUploadBox(); return false;">Add file</a></p>
<p><asp:Button ID="btnSubmit" runat="server" Text="Upload" OnClick="btnSubmit_Click" /></p>
<script type="text/javascript">
function addFileUploadBox()
{
if (!document.getElementById || !document.createElement)
return false;
var uploadArea = document.getElementById ("upload-area");
if (!uploadArea)
return;
var newLine = document.createElement ("br");
uploadArea.appendChild (newLine);
var newUploadBox = document.createElement ("input");
// Set up the new input for file uploads
newUploadBox.type = "file";
newUploadBox.size = "60";
// The new box needs a name and an ID
if (!addFileUploadBox.lastAssignedId)
addFileUploadBox.lastAssignedId = 100;
newUploadBox.setAttribute ("id", "dynamic" + addFileUploadBox.lastAssignedId);
newUploadBox.setAttribute ("name", "dynamic:" + addFileUploadBox.lastAssignedId);
uploadArea.appendChild (newUploadBox);
addFileUploadBox.lastAssignedId++;
}
</script>
<script type="text/C#" runat="server">
void btnSubmit_Click(object sender, EventArgs e)
{
HttpFileCollection uploads = HttpContext.Current.Request.Files;
for (int i = 0; i < uploads.Count; i++)
{
HttpPostedFile upload = uploads[i];
if (upload.ContentLength == 0)
continue;
// ---------------------------------------------------
// Save the uploaded file on disk or in database
// ---------------------------------------------------
}
}
</script>
</form>
</body>
</html>
Abraços,
Nícolas Tarzia