Если вы хотите реализовать функцию загрузки любого количества файлов, нажмите кнопку, чтобы добавить поле загрузки файлов, которое вы раньше видели на сетевом жестком диске. Я знаю, как добавить любой элемент управления загрузкой файла с помощью JavaScript. Проблема в том, что добавляется элемент управления Html, и я не знаю, как заставить серверную часть получить файл.
Поэтому я поискал в Google «Загрузка нескольких файлов ASP.NET» и на самом деле нашел статью под названием «Реализация загрузки нескольких файлов в ASP.NET». Эта статья была реализована в VB.NET, и функция была точно такой же, как и та, что была. Я хотел главным образом посмотреть, как сервер получает файлы, загруженные клиентом. Прочитав код в статье, оказывается, что файлы содержатся в System.Web.HttpContext.Current.Request.Files. загружено клиентским браузером. Я использую C#. Я написал простой код, изначально думая, что все должно быть в порядке, но неожиданно после загрузки трех изображений System.Web.HttpContext.Current.Request.Files вернул 0 форматов файлов.
Я не знаю почему, но я посмотрел на код. Он такой простой и не может быть неправильным. Затем я просмотрел несколько других статей в результатах поиска Google и обнаружил, что первая статья, которую я посмотрел, была не той. оригинальная работа. На сайте автора есть два примера оригинальной работы. Есть две версии: одна - VB.NET, а другая - C#. Теперь мне не нужно писать ее самому. local и запустите его. Это работает, так почему же написанный мной код не работает? Я неоднократно сравнивал разницу между своим кодом и кодом в статье, пробовал несколько мест и наконец обнаружил, что с другими местами это не имеет ничего общего. Причина была в <form id="form1" runat="server" enctype=". multipart/form-data"> enctype, страница, созданная в VS 2005, не имеет этого атрибута, но в примере статьи он есть. Позже я добавил enctype="multipart/form-data" и System.Web.HttpContext.Current.Request. .Файлов стало Количество файлов можно получить нормально.
Вероятно, страницы, построенные в VS 2003, имеют этот атрибут по умолчанию, иначе автор столь важного атрибута упомянул бы его в статье.
обратитесь к:
«Реализация загрузки нескольких файлов в ASP.NET»
Созданный мной тестовый код:
<%@ 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 ">
<script Language="JavaScript">
функция addFile()
{
var str = '<INPUT type="file" size="50" NAME="File">'
document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str)
}
</скрипт>
<html xmlns=" http://www.w3.org/1999/xhtml " >
<head runat="сервер">
<title>Страница без названия</title>
</голова>
<тело>
<form id="form1" runat="server" enctype="multipart/form-data">
<input type="button" value="Add" onclick="addFile()">
<input onclick="this.form.reset()" type="button" value="Reset(ReSet)">
<asp:Button Runat="server" Text="Upload" ID="Upload" OnClick="Upload_Click1" ></asp:Button>
<div id="МойФайл">
<input type="file" name="File" />
</div>
</форма>
</тело>
</html>
с помощью системы;
использование System.Data;
использование System.Configuration;
использование System.Collections;
использование System.Web;
использование System.Web.Security;
использование System.Web.UI;
использование System.Web.UI.WebControls;
использование System.Web.UI.WebControls.WebParts;
использование
пространства имен System.Web.UI.HtmlControls Demo
;
{
общедоступный частичный класс _Default: System.Web.UI.Page
{
protected void Page_Load (отправитель объекта, EventArgs e)
{
}
protected void Upload_Click1 (отправитель объекта, EventArgs e)
{
HttpFileCollection _files = System.Web.HttpContext.Current.Request.Files;
for (int i = 0; i < _files.Count; i++)
{
_files[i].SaveAs(Server.MapPath("~/Files/" + _files[i].FileName));
}
}
}
}
http://bg5sbk.cnblogs.com/archive/2006/06/11/mulitfileuploadtest.html