Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano sposób przekazywania pliku przy użyciu języka Microsoft Visual C#.
Oryginalna wersja produktu: Visual C#, ASP.NET, Internet Information Services
Oryginalny numer KB: 816150
Wprowadzenie
W tym artykule krok po kroku omówiono sposób przekazywania istniejącego pliku obrazu z lokalnego dysku twardego do witryny sieci Web. Kontrolka Dane wejściowe służy do przekazywania obrazu z komputera lokalnego. Ten przekazany plik jest weryfikowany na serwerze, aby upewnić się, że nie zastąpisz istniejącego pliku, który został już przekazany. Przekazany plik jest weryfikowany, czy istnieje na serwerze. W tym artykule użyto EncType
atrybutu formularza, aby osiągnąć funkcjonalność.
Wymagania
W tym artykule założono, że znasz następujące tematy:
- Aplikacje sieci Web
- ASP.NET
Na poniższej liście przedstawiono zalecane oprogramowanie i wymaganą infrastrukturę sieci:
- Visual C# .NET lub Visual C#
- Internet Information Services (IIS)
Tworzenie formularza internetowego ASP.NET
Uruchom program Visual Studio .NET lub Visual Studio.
W menu Plik wskaż polecenie Nowy, a następnie kliknij Projekt.
Uwaga 16.
W programie Visual Studio wskaż polecenie Nowy w menu Plik , a następnie kliknij pozycję Witryna sieci Web.
W obszarze Typy projektów kliknij pozycję Projekty Visual C#. W obszarze Szablony kliknij pozycję ASP.NET aplikacja internetowa.
Uwaga 16.
W programie Visual Studio wybierz pozycję Visual C# po prawej stronie pozycji Język. W obszarze Szablony kliknij ASP.NET witrynę sieci Web.
W polu Lokalizacja wpisz następującą lokalizację, a następnie kliknij przycisk OK:
http://WebServerName/ApplicationName
Uwaga 16.
WebServerName to symbol zastępczy nazwy serwera sieci Web. ApplicationName to symbol zastępczy nazwy aplikacji.
Domyślnie WebForm1.aspx jest tworzony.
Uwaga 16.
W programie Visual Studio wybierz pozycję HTTP po prawej stronie pozycji Lokalizacja, a następnie wpisz
<http://WebServerName>
.W menu Widok kliknij pozycję Źródło HTML.
Uwaga 16.
W programie Visual Studio kliknij pozycję Kod w menu Widok .
Modyfikowanie atrybutów formularza
W oknie HTML formularza WebForm1 zastąp tag formularza następującym kodem:
<form id="Form1" method="post" runat="server" EncType="multipart/form-data" action="WebForm1.aspx">
Atrybut EncType
określa format danych, które są publikowane. Przeglądarka używa tego atrybutu do kodowania informacji publikowanych na serwerze. Atrybut akcji w tym kodzie określa, że strona będzie przetwarzać żądanie. Domyślnie atrybut metody formularza jest ustawiany na post, aby można było wysyłać duże ilości danych w transakcji.
Dodaj kontrolkę Dane wejściowe, aby określić plik, który chcesz przekazać do serwera
W oknie HTML aplikacji WebForm1 dodaj następujący kod między otwarciem a tagami zamykającymi
<form>
:<INPUT id="oFile" type="file" runat="server" NAME="oFile">
Ta kontrolka Dane wejściowe określa plik, który chcesz przekazać do serwera.
Możesz dodać ciąg tekstowy przed kontrolką, aby wyświetlić monit użytkownika. Wpisz następujący tekst przed kontrolką Input w oknie HTML elementu WebForm1:
Wybierz plik obrazu, który ma być przekazywany do serwera:
Dodawanie kontrolki Przycisk
W oknie HTML aplikacji WebForm1 dodaj następujący kod między tagami otwierania i zamykania
<form>
po kodzie kontrolki Input:<asp:button id="btnUpload" type="submit" text="Upload" runat="server"></asp:button>
Ta kontrolka Przycisk służy do przekazywania pliku określonego w kontrolce Dane wejściowe.
Tworzenie kontrolki Panel zawierającej pojedynczą etykietę w celu wyświetlenia danych wyjściowych
W oknie HTML aplikacji WebForm1 dodaj następujący kod między tagami otwierania i zamykania <form>
po kodzie kontrolki Przycisk:
<asp:Panel ID="frmConfirmation" Visible="False" Runat="server">
<asp:Label id="lblUploadResult" Runat="server"></asp:Label>
</asp:Panel>
Ten kod służy do wyświetlania komunikatu w celu wskazania, czy przekazywanie pliku zakończyło się pomyślnie. Aby wyświetlić te dane wyjściowe, zostanie utworzona kontrolka Panel zawierająca pojedynczą etykietę.
Przekaż plik w zdarzeniu przycisku Kliknij
Kod w tej sekcji pobiera plik z lokalnego systemu plików, sprawdza, czy plik już istnieje na serwerze, a następnie przekazuje plik do witryny sieci Web. Aby dodać ten kod, wykonaj następujące kroki:
Kliknij dwukrotnie przycisk Przekaż utworzony w sekcji Dodawanie kontrolki Przycisk w tym artykule, aby utworzyć procedurę obsługi zdarzeń dla
Click
zdarzenia kontrolki przycisku.Dodaj następujący kod w górnej części okna Kod :
using System.IO;
Dodaj następujący kod do
Click
procedury obsługi zdarzeń dla przycisku Przekaż :string strFileName; string strFilePath; string strFolder; strFolder = Server.MapPath("./"); // Retrieve the name of the file that is posted. strFileName = oFile.PostedFile.FileName; strFileName = Path.GetFileName(strFileName); if(oFile.Value != "") { // Create the folder if it does not exist. if(!Directory.Exists(strFolder)) { Directory.CreateDirectory(strFolder); } // Save the uploaded file to the server. strFilePath = strFolder + strFileName; if(File.Exists(strFilePath)) { lblUploadResult.Text = strFileName + " already exists on the server!"; } else { oFile.PostedFile.SaveAs(strFilePath); lblUploadResult.Text = strFileName + " has been successfully uploaded."; } } else { lblUploadResult.Text = "Click 'Browse' to select the file to upload."; } // Display the result of the upload. frmConfirmation.Visible = true;
W menu File kliknij pozycję Save All.
Sprawdź, czy akcja przekazywania działa
W menu Debugowanie kliknij przycisk Start, aby skompilować i uruchomić aplikację. Zostanie wyświetlone pole tekstowe i przycisk polecenia.
Wpisz ścieżkę pliku obrazu w polu tekstowym lub kliknij przycisk Przeglądaj , aby zlokalizować plik obrazu na komputerze lokalnym.
Kliknij pozycję Przekaż , aby wysłać plik na serwer. Jeśli plik jest unikatowy, zostanie wyświetlony komunikat informujący o pomyślnym przekazaniu. Jeśli plik już istnieje na serwerze, zostanie wyświetlony odpowiedni komunikat. Pliki przekazywane z tej aplikacji są zapisywane w lokalizacji:
C:\inetpub\wwwroot\ApplicationName
na lokalnym dysku twardym.Aby aplikacja działała w programie .NET Framework, zezwól na pełny dostęp do użytkownika platformy ASPNET . W tym celu wykonaj następujące kroki:
Znajdź folder aplikacji w Eksploratorze Windows. Ścieżka to
C:\inetpub\wwwroot\ApplicationName
.Kliknij prawym przyciskiem myszy folder ApplicationName , a następnie kliknij polecenie Właściwości. Zostanie wyświetlone okno dialogowe Właściwości applicationName.
Kliknij przycisk zabezpieczeń kartę.
Kliknij przycisk Dodaj. Zostanie wyświetlone okno dialogowe Wybieranie użytkowników lub grup.
Uwaga 16.
W programie Visual Studio zostanie wyświetlone okno dialogowe Wybieranie użytkowników, komputerów lub grup .
Wpisz ASPNET w polu Wprowadź nazwy obiektów do wybrania , a następnie kliknij przycisk OK.
W oknie dialogowym Właściwości applicationName kliknij użytkownika ASPNET na liście Nazwy grup lub użytkowników.
W obszarze Zezwalaj kliknij, aby zaznaczyć pole wyboru Pełna kontrola , a następnie kliknij przycisk OK.
Kompletna lista kodu
WebForm1.aspx
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="Howto.WebForm1" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server" EncType="multipart/form-data" action="WebForm1.aspx"> Image file to upload to the server: <INPUT id="oFile" type="file" runat="server" NAME="oFile"> <asp:button id="btnUpload" type="submit" text="Upload" runat="server"></asp:button> <asp:Panel ID="frmConfirmation" Visible="False" Runat="server"> <asp:Label id="lblUploadResult" Runat="server"></asp:Label> </asp:Panel> </form> </body> </HTML>
WebForm1.aspx.cs
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.IO; namespace **ApplicationName** { /// <summary> /// Summary description for WebForm1. /// </summary> public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.Button btnUpload; protected System.Web.UI.WebControls.Label lblUploadResult; protected System.Web.UI.WebControls.Panel frmConfirmation; protected System.Web.UI.HtmlControls.HtmlInputFile oFile; private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // CODEGEN: This call is required by the ASP.NET Web Form Designer. InitializeComponent(); base.OnInit(e); } /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.btnUpload.Click += new System.EventHandler(this.btnUpload_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void btnUpload_Click(object sender, System.EventArgs e) { string strFileName; string strFilePath; string strFolder; strFolder = Server.MapPath("./"); // Get the name of the file that is posted. strFileName = oFile.PostedFile.FileName; strFileName = Path.GetFileName(strFileName); if(oFile.Value != "") { // Create the directory if it does not exist. if(!Directory.Exists(strFolder)) { Directory.CreateDirectory(strFolder); } // Save the uploaded file to the server. strFilePath = strFolder + strFileName; if(File.Exists(strFilePath)) { lblUploadResult.Text = strFileName + " already exists on the server!"; } else { oFile.PostedFile.SaveAs(strFilePath); lblUploadResult.Text = strFileName + " has been successfully uploaded."; } } else { lblUploadResult.Text = "Click 'Browse' to select the file to upload."; } // Display the result of the upload. frmConfirmation.Visible = true; } }
Uwaga 16.
Kod wygenerowany w programie Visual Studio różni się od kodu wygenerowanego w programie Visual Studio .NET.
Rozwiązywanie problemów
- Otwórz plik Machine.config znajdujący się na komputerze w folderze CONFIG w ścieżce, w której zainstalowano środowisko uruchomieniowe.
- Znajdź sekcję
<processModel>
w pliku Machine.config , zmieńuser
atrybuty ipassword
na nazwę i hasło użytkownika, którego chcesz W3wp.exe lub Aspnet_wp.exe do uruchomienia, a następnie zapisz plik Machine.config . - Znajdź folder Tymczasowe pliki ASP.NET , który znajduje się w folderze CONFIG . Kliknij prawym przyciskiem myszy folder Tymczasowe pliki ASP.NET , a następnie kliknij polecenie Właściwości.
- W oknie dialogowym Właściwości plików tymczasowej ASP.NET kliknij kartę Zabezpieczenia.
- Kliknij Zaawansowane.
- W oknie dialogowym Ustawienia kontroli dostępu dla plików tymczasowych ASP.NET kliknij przycisk Dodaj.
- W oknie dialogowym wpisz nazwę użytkownika w polu Nazwa , a następnie kliknij przycisk OK.
- W wpis uprawnień dla plików tymczasowych ASP.NET okno dialogowe, nadaj użytkownikowi pełne uprawnienia, a następnie kliknij przycisk OK, aby zamknąć okno dialogowe Właściwości plików tymczasowych ASP.NET.