Se você deseja realizar a função de upload de qualquer número de arquivos, clique em um botão para adicionar uma caixa de upload de arquivo, que você já viu no disco rígido da rede antes. Eu sei como adicionar qualquer controle de upload de arquivo usando JavaScript. O problema é que o controle HTML foi adicionado e não sei como fazer com que o lado do servidor obtenha o arquivo.
Então, pesquisei no Google por "upload de vários arquivos do ASP.NET" e encontrei um artigo intitulado "Implementando upload de vários arquivos no ASP.NET. O artigo foi implementado em VB.NET e a função era exatamente a mesma". Eu queria principalmente ver como o servidor obtém os arquivos carregados pelo cliente. Depois de ler o código do artigo, descobri que System.Web.HttpContext.Current.Request.Files contém os arquivos. carregado pelo navegador do cliente. Eu uso C #. Escrevi um código simples, originalmente pensando que deveria estar OK, mas inesperadamente, após o upload de 3 imagens, System.Web.HttpContext.Current.Request.Files retornou 0 formatos de arquivo.
Não sei por que, mas olhei o código. É tão simples e não pode estar errado. Depois olhei vários outros artigos nos resultados de pesquisa do Google e descobri que o primeiro artigo que li não era o. trabalho original. Existem dois exemplos do trabalho original no site do autor. Existem duas versões, uma é VB.NET e a outra é C#. local e executá-lo. Funciona, então por que o código que escrevi não funciona? Comparei repetidamente a diferença entre meu código e o código do artigo, tentei vários lugares e finalmente descobri que não tinha nada a ver com outros lugares. O motivo era <form id="form1" runat="server" enctype=". atributo multipart/form-data"> enctype, a página criada no VS 2005 não possui esse atributo, mas o exemplo do artigo possui. Posteriormente, adicionei enctype="multipart/form-data" e System.Web.HttpContext.Current.Request .Arquivos se tornaram O número de arquivos pode ser obtido normalmente.
Provavelmente as páginas construídas no VS 2003 possuem este atributo por padrão, caso contrário o autor de um atributo tão importante o teria mencionado no artigo.
consulte:
"Implementando vários uploads de arquivos em ASP.NET"
O código de teste que fiz:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Demo._Default" %>
< ! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<linguagem script="JavaScript">
função adicionarArquivo()
{
var str = '<INPUT type="arquivo" size="50" NAME="Arquivo">'
document.getElementById('MeuArquivo').insertAdjacentHTML("beforeEnd",str)
}
</script>
<html xmlns=" http://www.w3.org/1999/xhtml " >
<head runat="servidor">
<title>Página sem título</title>
</head>
<corpo>
<form id="form1" runat="server" enctype="multipart/form-data">
<input type="button" value="Adicionar" onclick="addFile()">
<input onclick="this.form.reset()" type="button" value="Reset(ReSet)">
<asp:Button Runat="servidor" Text="Upload" ID="Upload" OnClick="Upload_Click1" ></asp:Button>
<div id="MeuArquivo">
<input type="arquivo" nome="Arquivo" />
</div>
</form>
</body>
</html>
usando Sistema;
usando System.Data;
usando System.Configuration;
usando System.Collections;
usando System.Web;
usando System.Web.Security;
usando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.WebControls.WebParts;
usando System.Web.UI.HtmlControls
demonstração de namespace
;
{
classe parcial pública _Default: System.Web.UI.Page
{
protegido void Page_Load (remetente do objeto, EventArgs e)
{
}
protegido void Upload_Click1 (objeto remetente, EventArgs e)
{
HttpFileCollection _files = System.Web.HttpContext.Current.Request.Files
para (int i = 0; i < _files.Count; i++)
{
_files[i].SaveAs(Server.MapPath("~/Arquivos/" + _files[i].NomeArquivo));
}
}
}
}
http://bg5sbk.cnblogs.com/archive/2006/06/11/mulitfileuploadtest.html