Wenn Sie die Funktion zum Hochladen einer beliebigen Anzahl von Dateien realisieren möchten, klicken Sie auf eine Schaltfläche zum Hinzufügen einer Datei-Upload-Box, die Sie zuvor auf der Netzwerkfestplatte gesehen haben. Ich weiß, wie ich mit JavaScript ein Steuerelement zum Hochladen von Dateien hinzufügen kann. Das Problem besteht darin, dass das HTML-Steuerelement hinzugefügt wird und ich nicht weiß, wie ich die Datei auf der Serverseite abrufen kann.
Also habe ich bei Google nach „ASP.NET-Upload mehrerer Dateien“ gesucht und tatsächlich einen Artikel mit dem Titel „Implementieren mehrerer Datei-Uploads in ASP.NET“ gefunden. Der Artikel wurde in VB.NET implementiert und die Funktion war genau die gleiche Ich wollte hauptsächlich sehen, wie der Server die vom Client hochgeladenen Dateien erhält. Nach dem Lesen des Codes stellt sich heraus, dass System.Web.HttpContext.Current.Request.Files die Dateien enthält Vom Client-Browser hochgeladen. Ich habe einen einfachen Code geschrieben und dachte ursprünglich, dass er in Ordnung sein sollte, aber nach dem Hochladen von 3 Bildern gab System.Web.HttpContext.Current.Request.Files unerwartet 0 Dateiformate zurück.
Ich weiß nicht warum, aber ich habe mir den Code angesehen. Er ist so einfach und kann nicht falsch sein. Dann habe ich mir mehrere andere Artikel in den Google-Suchergebnissen angesehen Originalarbeit Es gibt zwei Beispiele der Originalarbeit auf der Website. Es gibt zwei Versionen, eine ist VB.NET und die andere ist C#. Jetzt muss ich den Originalcode nicht kopieren local und führen Sie es aus. Warum funktioniert der Code, den ich geschrieben habe, nicht? Ich habe wiederholt den Unterschied zwischen meinem Code und dem Code im Artikel verglichen, mehrere Stellen ausprobiert und schließlich festgestellt, dass es nichts mit anderen Stellen zu tun hat. Der Grund war <form id="form1" runat="server" enctype=". multipart/form-data“> enctype-Attribut, die in VS 2005 erstellte Seite verfügt nicht über dieses Attribut, das Artikelbeispiel jedoch schon. Später habe ich enctype="multipart/form-data" und System.Web.HttpContext.Current.Request hinzugefügt .Dateien wurden Die Anzahl der Dateien kann normal abgerufen werden.
Wahrscheinlich verfügen die in VS 2003 erstellten Seiten standardmäßig über dieses Attribut, sonst hätte der Autor eines so wichtigen Attributs es im Artikel erwähnt.
siehe:
„Implementierung mehrerer Datei-Uploads in ASP.NET“
Der von mir erstellte Testcode:
<%@ 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">
Funktion addFile()
{
var str = '<INPUT type="file" size="50" NAME="File">'
document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str)
}
</script>
<html xmlns=" http://www.w3.org/1999/xhtml " >
<head runat="server">
<title>Unbenannte Seite</title>
</head>
<Körper>
<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="MyFile">
<input type="file" name="File" />
</div>
</form>
</body>
</html>
using System;
Verwenden von System.Data;
Verwenden von System.Configuration;
Verwenden von System.Collections;
mit System.Web;
mit System.Web.Security;
mit System.Web.UI;
mit System.Web.UI.WebControls;
mit System.Web.UI.WebControls.WebParts;
mit System.Web.UI.HtmlControls;
Namespace-Demo
{
öffentliche Teilklasse _Default: System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Upload_Click1(object sender, 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