Πώς μπορείτε να αποστείλετε ένα αρχείο σε ένα διακομιστή Web στο ASP.NET χρησιμοποιώντας το Visual C# .NET

Σύνοψη

Αυτό το άρθρο βήμα προς βήμα περιγράφει τον τρόπο για να αποστείλετε ένα αρχείο σε ένα διακομιστή Web χρησιμοποιώντας το Visual C# .NET. Σε αυτό το άρθρο, μπορείτε να δημιουργήσετε ένα αρχείο Microsoft ASP.NET (αρχείο WebForm1.aspx) και το αρχείο κώδικα πίσω από σχετικές (WebForm1.aspx.cs) για την αποστολή αρχείων σε έναν κατάλογο που ονομάζεται δεδομένων.

Επιστροφή στην κορυφή

Δημιουργία μιας εφαρμογής ASP.NET

Στο Microsoft Visual Studio .NET, ακολουθήστε τα εξής βήματα για να δημιουργήσετε μια νέα εφαρμογή για την αποστολή αρχείων στο διακομιστή Web:
  1. Ξεκινήστε το Microsoft Visual Studio .NET.
  2. Στο μενού αρχείο , επιλέξτε Δημιουργίακαι, στη συνέχεια, κάντε κλικ στο έργο.
  3. Στο πλαίσιο διαλόγου " Νέο έργο ", κάντε κλικ στο κουμπί Visual C# έργα στην περιοχή Τύποι έργουκαι, στη συνέχεια, κάντε κλικ στην Εφαρμογή Web του ASP.NET στην περιοχή πρότυπα.
  4. Στο πλαίσιο " θέση ", πληκτρολογήστε τη διεύθυνση URL για να δημιουργήσετε το έργο. Για αυτό το παράδειγμα, πληκτρολογήστε
    http://localhost/CSharpUpload, που δημιουργεί το προεπιλεγμένο όνομα του έργου του CSharpUpload. Παρατηρήστε ότι το αρχείο WebForm1.aspx αρχείο φορτώνει στην προβολή "Σχεδίαση" του Visual Studio .NET.
Επιστροφή στην κορυφή

Η δημιουργία του καταλόγου δεδομένων

Μετά τη δημιουργία της εφαρμογής, μπορείτε να δημιουργήσετε τον κατάλογο δεδομένων που θα δέχονται αρχεία που αποστέλλονται. Αφού δημιουργήσετε αυτόν τον κατάλογο, πρέπει να ορίσετε δικαιώματα για το λογαριασμό εργασίας ASPNET εγγραφής.
  1. Στο παράθυρο Εξερεύνηση λύσεων του Visual Studio .NET, κάντε δεξιό κλικ στο CSharpUpload, στην Προσθήκηκαι, στη συνέχεια, κάντε κλικ στο Νέο φάκελο. Από προεπιλογή, δημιουργείται ένας νέος φάκελος που ονομάζεται NewFolder1.
  2. Για να αλλάξετε το όνομα του φακέλου δεδομένων, κάντε δεξιό κλικ στο NewFolder1, κάντε κλικ στην επιλογή Μετονομασίακαι, στη συνέχεια, να πληκτρολογήσετε δεδομένα.
  3. Ξεκινήστε τον Windows Explorer και, στη συνέχεια, εντοπίστε το φάκελο συστήματος αρχείων δεδομένων που δημιουργήσατε στο βήμα 2. Από προεπιλογή, αυτός ο φάκελος βρίσκεται στον ακόλουθο φάκελο:
    C:\Inetpub\wwwroot\CSharpUpload\Data
  4. Για να αλλάξετε την ασφάλεια ρυθμίσεις για τη χορήγηση εγγραφή δικαιώματα στον κατάλογο "δεδομένα", κάντε δεξιό κλικ στο στοιχείο δεδομένωνκαι, στη συνέχεια, κάντε κλικ στο κουμπί Ιδιότητες.
  5. Στο παράθυρο διαλόγου Ιδιότητες δεδομένων , κάντε κλικ στην καρτέλα " ασφάλεια " και, στη συνέχεια, κάντε κλικ στο κουμπί Προσθήκη.
  6. Στο παράθυρο διαλόγου Επιλογή χρηστών ή ομάδων , κάντε κλικ στο λογαριασμό ASPNET και, στη συνέχεια, κάντε κλικ στο κουμπί Προσθήκη. Κάντε κλικ στο κουμπί OK για να κλείσετε το παράθυρο διαλόγου Επιλογή χρηστών ή ομάδων .
  7. Κάντε κλικ στο κουμπί του λογαριασμού aspnet_wp (όνομα_υπολογιστή\ASPNET) λογαριασμού και, στη συνέχεια, κάντε κλικ για να επιλέξετε τα πλαίσια ελέγχου Αποδοχή για τα ακόλουθα δικαιώματα:

    • Ανάγνωση και εκτέλεση
    • Λίστα περιεχομένων φακέλου
    • Ανάγνωση
    • Εγγραφή

    Κάντε κλικ για να καταργήσετε οποιαδήποτε άλλα Αποδοχή και Απόρριψη των πλαισίων ελέγχου.
  8. Κάντε κλικ στο κουμπί OK για να κλείσετε το παράθυρο διαλόγου Ιδιότητες δεδομένων . Έχετε τροποποιήσει με επιτυχία τα δικαιώματα καταλόγου δεδομένων για αποδοχή χρήστη αποστολή αρχείων.
Επιστροφή στην κορυφή

Τροποποιήστε τη σελίδα αρχείο WebForm1.aspx

Για να τροποποιήσετε τον κώδικα HTML του αρχείου αρχείο WebForm1.aspx να επιτρέπει στους χρήστες να αποστέλλουν αρχεία, ακολουθήστε τα εξής βήματα:
  1. Επιστροφή στην ανοιχτή περίοδο λειτουργίας του Visual Studio .NET. Αρχείο WebForm1.aspx πρέπει να είναι ανοιχτή στο παράθυρο "Σχεδίαση".
  2. Για να προβάλετε την προέλευση HTML της σελίδας αρχείο WebForm1.aspx, κάντε δεξιό κλικ στο αρχείο WebForm1.aspx στο παράθυρο "Σχεδίαση" και, στη συνέχεια, κάντε κλικ στην επιλογή Προβολή προέλευσης HTML.
  3. Εντοπίστε τον ακόλουθο κώδικα HTML που περιέχει την ετικέτα < form >:
    <form id="Form1" method="post" runat="server">
  4. Προσθέστε το enctype = "φόρμα/multipart-δεδομένων" χαρακτηριστικό ονόματος-τιμής για την ετικέτα < form >, ως εξής:
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
  5. Μετά την ετικέτα έναρξης < φόρμας >, προσθέστε τον ακόλουθο κώδικα:
    <INPUT type=file id=File1 name=File1 runat="server" /><br>
    <input type="submit" id="Submit1" value="Upload" runat="server" />

  6. Βεβαιωθείτε ότι η ετικέτα HTML < ΦΟΡΜΑ > εμφανίζεται ως εξής:
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server"><INPUT type=file id=File1 name=File1 runat="server" />
    <br>
    <input type="submit" id="Submit1" value="Upload" runat="server" />
    </form>

Επιστροφή στην κορυφή

Προσθέστε τον κώδικα αποστολής στο αρχείο πίσω από κώδικα WebForm1.aspx.cs

Για να τροποποιήσετε το αρχείο κώδικα πίσω από WebForm1.aspx.cs, ώστε να δέχεται τα απεσταλμένα δεδομένα, ακολουθήστε τα εξής βήματα:
  1. Στο μενού Προβολή , κάντε κλικ στο σχέδιο.
  2. Κάντε διπλό κλικ στην Αποστολή. Visual Studio ανοίγει το αρχείο κώδικα πίσω από WebForm1.aspx.cs και δημιουργεί αυτόματα τον κωδικό της παρακάτω μεθόδου:
    private void Submit1_ServerClick(object sender, System.EventArgs e){


    }
  3. Βεβαιωθείτε ότι ο ακόλουθος κώδικας υπάρχει στο επίπεδο κλάσης του αρχείου WebForm1.cs:
    protected System.Web.UI.HtmlControls.HtmlInputFile File1;protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;

    Εάν αυτός ο κώδικας δεν υπάρχει στο αρχείο, προσθέστε τον κώδικα στο αρχείο μετά την παρακάτω γραμμή:
    public class WebForm1 : System.Web.UI.Page{

  4. Εντοπίστε τον ακόλουθο κώδικα:
    private void Submit1_ServerClick(object sender, System.EventArgs e){

  5. Πιέστε το πλήκτρο ENTER για να προσθέσετε μια κενή γραμμή και, στη συνέχεια, προσθέστε τον ακόλουθο κώδικα:
    if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) ){
    string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
    string SaveLocation = Server.MapPath("Data") + "\\" + fn;
    try
    {
    File1.PostedFile.SaveAs(SaveLocation);
    Response.Write("The file has been uploaded.");
    }
    catch ( Exception ex )
    {
    Response.Write("Error: " + ex.Message);
    //Note: Exception.Message returns a detailed message that describes the current exception.
    //For security reasons, we do not recommend that you return Exception.Message to end users in
    //production environments. It would be better to put a generic error message.
    }
    }
    else
    {
    Response.Write("Please select a file to upload.");
    }
    Αυτός ο κώδικας επιβεβαιώνει πρώτα ότι ένα αρχείο έχει αποσταλεί. Εάν έχει επιλεγεί κανένα αρχείο, εμφανίζεται το μήνυμα "Επιλέξτε ένα αρχείο για Αποστολή". Εάν αποστέλλεται ένα έγκυρο αρχείο, το όνομα αρχείου που έχει εξαχθεί, χρησιμοποιώντας το πεδίο ονομάτων System.IO και ο προορισμός είναι συγκεντρωμένα σε μια διαδρομή SaveAs . Αφού είναι γνωστός ο τελικός προορισμός, το αρχείο αποθηκεύεται χρησιμοποιώντας τη μέθοδο File1.PostedFile.SaveAs . Κάθε εξαίρεση παγιδεύεται και εμφανίζεται στην οθόνη το μήνυμα εξαίρεσης.
  6. Βεβαιωθείτε ότι η υπορουτίνα Submit1 εμφανίζεται ως εξής:
    private void Submit1_ServerClick(object sender, System.EventArgs e){
    if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) )
    {
    string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
    string SaveLocation = Server.MapPath("Data") + "\\" + fn;
    try
    {
    File1.PostedFile.SaveAs(SaveLocation);
    Response.Write("The file has been uploaded.");
    }
    catch ( Exception ex )
    {
    Response.Write("Error: " + ex.Message);
    //Note: Exception.Message returns detailed message that describes the current exception.
    //For security reasons, we do not recommend you return Exception.Message to end users in
    //production environments. It would be better just to put a generic error message.
    }
    }
    else
    {
    Response.Write("Please select a file to upload.");
    }
    }
Επιστροφή στην κορυφή

Δοκιμή της εφαρμογής

Για να δημιουργήσετε τη λύση Visual Studio .NET και να δοκιμάσετε την εφαρμογή, ακολουθήστε τα εξής βήματα:
  1. Από το μενού Δημιουργία , κάντε κλικ στο κουμπί Δημιουργία λύσης.
  2. Στην Εξερεύνηση λύσεων, κάντε δεξιό κλικ στο αρχείο WebForm1.aspxκαι, στη συνέχεια, κάντε κλικ στο κουμπί Προβολή σε πρόγραμμα περιήγησης.
  3. Αφού το αρχείο WebForm1.aspx ανοίγει στο πρόγραμμα περιήγησης, κάντε κλικ στο κουμπί Αναζήτηση.
  4. Στο πλαίσιο διαλόγου " Επιλογή αρχείου ", επιλέξτε ένα αρχείο το οποίο είναι μικρότερο από 4 megabyte (MB) και, στη συνέχεια, κάντε κλικ στο κουμπί Άνοιγμα.
  5. Για να στείλετε το αρχείο, κάντε κλικ στο κουμπί Αποστολή. Παρατηρήστε ότι το αρχείο αποστέλλει στο διακομιστή Web και ότι εμφανίζεται το μήνυμα "το αρχείο έχει αποσταλεί".
  6. Επιστροφή στην ανοιχτή περίοδο λειτουργίας της Εξερεύνησης των Windows και, στη συνέχεια, εντοπίστε τον κατάλογο δεδομένων.
  7. Βεβαιωθείτε ότι το αρχείο έχει αποσταλεί στον κατάλογο δεδομένων.
Επιστροφή στην κορυφή

Αποστολή μεγαλύτερων αρχείων

Από προεπιλογή, το ASP.NET επιτρέπει μόνο αρχεία που είναι 4.096 kilobyte (KB) (ή 4 MB) ή λιγότερο να αποστέλλονται στο διακομιστή Web. Για να στείλετε μεγαλύτερα αρχεία, πρέπει να αλλάξετε την παράμετρο maxRequestLength της ενότητας < httpRuntime > στο αρχείο Web.config.

Σημείωση Όταν η ιδιότητα maxRequestLength έχει οριστεί στο αρχείο Machine.config και, στη συνέχεια, καταχωρείται μια αίτηση (για παράδειγμα, ένα αρχείο αποστολή) που υπερβαίνει την τιμή του maxRequestLength, δεν μπορεί να εμφανιστεί μια προσαρμοσμένη σελίδα σφάλματος. Αντίθετα, το Microsoft Internet Explorer θα εμφανίσει ένα μήνυμα λάθους "Δεν είναι δυνατή η εύρεση διακομιστή ή DNS".

Εάν θέλετε να αλλάξετε αυτήν τη ρύθμιση για το σύνολο του υπολογιστή και όχι μόνο αυτήν την εφαρμογή ASP.NET, πρέπει να τροποποιήσετε το αρχείο Machine.config.

Από προεπιλογή, το στοιχείο < httpRuntime > έχει οριστεί για τις ακόλουθες παραμέτρους στο αρχείο Machine.config:
<httpRuntime executionTimeout="90" 
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
/>

Το αρχείο Machine.config βρίσκεται στο το \ καταλόγου \CONFIGΑριθμός έκδοσης\Microsoft.NET\Framework\Ρίζα συστήματος.

Επιστροφή στην κορυφή

Ολοκληρώσετε την καταχώρηση κωδικού

WebForm1.aspx

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="CSharpUpload.WebForm1" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<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" enctype="multipart/form-data" runat="server">
<INPUT type=file id=File1 name=File1 runat="server" >
<br>
<input type="submit" id="Submit1" value="Upload" runat="server" NAME="Submit1">
</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;

namespace CSharpUpload
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlInputFile File1;
protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;

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.Submit1.ServerClick += new System.EventHandler(this.Submit1_ServerClick);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Submit1_ServerClick(object sender, System.EventArgs e)
{
if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) )
{
string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
string SaveLocation = Server.MapPath("Data") + "\\" + fn;
try
{
File1.PostedFile.SaveAs(SaveLocation);
Response.Write("The file has been uploaded.");
}
catch ( Exception ex )
{
Response.Write("Error: " + ex.Message);
//Note: Exception.Message returns a detailed message that describes the current exception.
//For security reasons, we do not recommend that you return Exception.Message to end users in
//production environments. It would be better to return a generic error message.
}
}
else
{
Response.Write("Please select a file to upload.");
}
}
}
}

Επιστροφή στην κορυφή

Περισσότερες πληροφορίες

Θεωρητικά, το μέγιστο μέγεθος αποστολής είναι αρκετά μεγάλο. Ωστόσο, λόγω ASP.NET παρακολούθηση της εύρυθμης λειτουργίας, δεν είναι δυνατό να αποστείλετε πολύ μεγάλα αρχεία στο ASP.NET. Η διαδικασία εργασίας ASP.NET έχει χώρο εικονικών διευθύνσεων των 2 gigabyte (GB). Ωστόσο, η διαδικασία εργασίας ASP.NET χρησιμοποιεί μόνο λίγο περισσότερο από 1 GB εξαιτίας εύρυθμης λειτουργίας παρακολούθησης και μνήμη κατακερματισμού.


Κατά τη διαδικασία αποστολής, το ASP.NET φορτώνει ολόκληρο το αρχείο στη μνήμη πριν ο χρήστης να αποθηκεύσετε το αρχείο στο δίσκο. Επομένως, η διαδικασία ενδέχεται να Ανακύκλωσης λόγω το όριο μνήμης χαρακτηριστικό της ετικέτας processModel του αρχείου Machine.config. Το όριο μνήμης χαρακτηριστικό καθορίζει το ποσοστό φυσικής μνήμης που επεξεργάζονται το βοηθητικό ASP.NET μπορεί να εξαντλήσει πριν η διεργασία ανακυκλώνεται αυτόματα. Ανακύκλωση εμποδίζει "διαρροές" μνήμης να προκαλεί ASP.NET για να διακοπεί η λειτουργία του ή να σταματήσει να ανταποκρίνεται.

Επιπλέον, άλλοι παράγοντες παίζουν ρόλο με το μέγιστο μέγεθος αρχείου που μπορεί να αποσταλεί. Στους παράγοντες αυτούς περιλαμβάνεται η διαθέσιμη μνήμη, χώρος στο σκληρό δίσκο, ταχύτητα επεξεργαστή και τρέχουσα κίνηση στο δίκτυο. Με τακτικές μεταφορές αρχείων που αποστέλλεται, η Microsoft συνιστά να χρησιμοποιείτε ένα μέγιστο μέγεθος αρχείου στην περιοχή από 10 έως 20 megabyte (MB). Εάν σπάνια αποστολή αρχείων, το μέγιστο μέγεθος αρχείου μπορεί να είναι 100 MB.

Σημείωση Μπορείτε να αποστείλετε τα αρχεία που είναι μεγαλύτερα από 100 MB στο ASP.NET. Ωστόσο, η Microsoft συνιστά να ακολουθήσετε τα μεγέθη αποστολής αρχείου μέγιστο που αναφέρονται σε αυτό το άρθρο. Για να προσδιορίσετε πιο ακριβή μεγέθη των αρχείων, εκτελέστε καταπόνησης δοκιμής σε υπολογιστές που είναι παρόμοιες με αυτές που θα χρησιμοποιηθεί στην παραγωγή.

Εάν συναντήσετε όρια μεγέθους αρχείου κατά τη διαδικασία αποστολής αρχείων, ενδέχεται να παρατηρήσετε τα ακόλουθα μηνύματα λάθους:
  • Δεν είναι δυνατή η εμφάνιση της σελίδας.
  • Η εφαρμογή διακομιστή δεν είναι διαθέσιμο
    Στο αρχείο καταγραφής συμβάντων, το μήνυμα λάθους θα είναι παρόμοιο με το ακόλουθο:
  • Τύπου System.OutOfMemoryException εξαίρεση.
Μπορείτε επίσης να βρείτε ότι οι αποστολές πραγματοποιούνται πολύ αργά. Εάν μπορείτε να παρακολουθήσετε τη διαδικασία Aspnet_wp.exe στη Διαχείριση εργασιών των Windows, θα παρατηρήσετε ότι η διαφορά μνήμης αλλάζει από 64 KB κάθε 1 έως 2 δευτερόλεπτα. Ανάλογα με το μέγεθος του αρχείου, αυτή η καθυστέρηση μπορεί να προκαλέσει η διαδικασία εργασίας ASP.NET για ανακύκλωση εξαιτίας ενός σφάλματος responseDeadlock.

Αναφορές

Για πρόσθετες πληροφορίες, επισκεφθείτε τις ακόλουθες τοποθεσίες Web της Microsoft Developer Network (MSDN);
το στοιχείο < httpRuntime >
http://msdn2.microsoft.com/en-us/library/e1f13641(vs.71).aspx

Στοιχείο ΕΙΣΑΓΩΓΉΣ | αντικείμενο εισόδου
http://msdn.microsoft.com/en-us/library/ms535260(VS.85).aspx

Το χαρακτηριστικό ENCTYPE | η ιδιότητα enctype
http://msdn2.microsoft.com/en-us/library/ms533745.aspx

Κλάση HtmlInputFile
http://msdn2.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlinputfile(vs.71).aspx

Η ιδιότητα HtmlInputFile.PostedFile
http://msdn2.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlinputfile.postedfile(vs.71).aspx
Επιστροφή στην κορυφή
Ιδιότητες

Αναγνωριστικό άρθρου: 323246 - Τελευταία αναθεώρηση: 17 Ιαν 2017 - Αναθεώρηση: 2

Σχόλια