كيفية تحميل ملف إلى ملقم ويب ASP.NET باستخدام Visual C#.NET

ملخص

توضح هذه المقالة خطوة بخطوة كيفية تحميل ملف إلى خادم ويب باستخدام Visual C#.NET. في هذه المقالة بإنشاء ملف Microsoft ASP.NET (WebForm1.aspx) وملف التعليمات البرمجية الخلفية ذات الصلة به (WebForm1.aspx.cs) لتحميل ملفات إلى دليل يسمى البيانات.

العودة إلى أعلى

إنشاء تطبيق ASP.NET

في Microsoft Visual Studio.NET، اتبع هذه الخطوات لإنشاء تطبيق جديد لتحميل ملفات إلى ملقم ويب:
  1. Microsoft Visual Studio.NET.بدء تشغيل
  2. من القائمة ملف، أشر إلى جديد ثم انقر فوق المشروع.
  3. في مربع الحوار مشروع جديد ، انقر فوق مشاريع Visual C# ضمن أنواع المشاريع، ومن ثم انقر فوق تطبيق ويب ASP.NET ضمن قوالب.
  4. في المربع الموقع ، اكتب عنوان URL لإنشاء المشروع. على سبيل المثال، اكتب
    http://localhost/CSharpUpload، الذي يقوم بإنشاء اسم المشروع الافتراضي كشاربوبلواد. لاحظ أن الملف WebForm1.aspx تحميل في عرض مصمم Visual Studio.NET.
العودة إلى أعلى

إنشاء دليل البيانات

بعد إنشاء التطبيق، يمكنك إنشاء دليل بيانات الذي سيقبل الملفات التي يتم تحميلها. بعد إنشاء هذا الدليل، يجب عليك أيضا تعيين أذونات كتابة لحساب عامل ASPNET.
  1. في نافذة "مستكشف الحلول" من Visual Studio.NET، انقر بالزر الأيمن كشاربوبلوادوأشر إلى إضافة، وثم انقر فوق مجلد جديد. بشكل افتراضي، يتم إنشاء مجلد جديد يسمى NewFolder1.
  2. لتغيير اسم المجلد إلى البيانات، انقر نقراً مزدوجاً فوق NewFolder1انقر فوق إعادة تسميةوثم كتابة البيانات.
  3. بدء تشغيل مستكشف Windows، ومن ثم حدد موقع مجلد نظام ملف البيانات الذي قمت بإنشائه في الخطوة 2. بشكل افتراضي، يوجد هذا المجلد في المجلد التالي:
    C:\Inetpub\wwwroot\CSharpUpload\Data
  4. لتغيير الأمان كتابة إعدادات لمنح أذونات إلى الدليل "بيانات"، انقر نقراً مزدوجاً فوق البياناتوثم انقر فوق خصائص.
  5. في مربع الحوار خصائص البيانات ، انقر فوق علامة التبويب أمان ، ومن ثم انقر فوق إضافة.
  6. في مربع الحوار حدد مستخدمين أو مجموعات ، انقر فوق حساب ASPNET ومن ثم انقر فوق إضافة. انقر فوق موافق لإغلاق مربع الحوار تحديد مستخدمين أو مجموعات .
  7. انقر فوق حساب aspnet_wp (اسم الكمبيوتر\ASPNET) حساب، وثم انقر لتحديد خانات الاختيار السماح للأذونات التالية:

    • القراءة والتنفيذ
    • سرد محتويات المجلد
    • القراءة
    • الكتابة

    انقر لإلغاء تحديد أي السماح و الرفض خانات الاختيار الأخرى.
  8. انقر فوق موافق لإغلاق مربع الحوار خصائص البيانات . لقد قمت بتعديل أذونات الدليل "بيانات" لقبول ملفات المستخدم التي يتم تحميلها بنجاح.
العودة إلى أعلى

تعديل الصفحة WebForm1.aspx

لتعديل التعليمات البرمجية ل HTML من ملف WebForm1.aspx للسماح للمستخدمين بتحميل الملفات، اتبع الخطوات التالية:
  1. العودة إلى فتح مثيل Visual Studio.NET. يجب أن تكون الصفحة WebForm1.aspx مفتوحة في إطار "المصمم".
  2. لعرض مصدر HTML للصفحة WebForm1.aspx، زر الماوس الأيمن فوق الصفحة WebForm1.aspx في إطار "المصمم"، ومن ثم انقر فوق عرض مصدر HTML.
  3. حدد الكود التالي، الذي يحتوي على علامة < form >:
    <form id="Form1" method="post" runat="server">
  4. إضافة enctype = "متعددة الأجزاء/النموذج-البيانات" اسم-قيمة السمة إلى علامة < 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 > كما يلي:
    <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. انقر نقراً مزدوجاً فوق تحميل. فتح ملف التعليمات البرمجية الخلفية WebForm1.aspx.cs visual Studio ويقوم تلقائياً بإنشاء التعليمات البرمجية الأسلوب التالي:
    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 وتجميع وجهته في مسار حفظ باسم . بعد أن تعرف الوجهة النهائية، يتم حفظ الملف باستخدام أسلوب 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 ميغابايت (MB)، ومن ثم انقر فوق فتح.
  5. لتحميل الملف، انقر فوق تحميل. لاحظ أن تحميل الملف إلى ملقم ويب، وتظهر رسالة "تم تحميل الملف".
  6. العودة إلى المثيل المفتوح لمستكشف Windows ومن ثم تحديد موقع دليل البيانات.
  7. تحقق من تحميل الملف إلى دليل البيانات.
العودة إلى أعلى

تحميل ملفات أكبر

بشكل افتراضي، يسمح ASP.NET فقط الملفات التي يتم 4096 كيلو بايت (KB) (أو 4 ميغا بايت) أو أقل تحميل إلى ملقم ويب. لتحميل ملفات أكبر، يجب تغيير المعلمة maxRequestLength قسم < هتبرونتيمي > في ملف Web.config.

ملاحظة: عندما يتم تعيين سمة maxRequestLength في الملف Machine.config وثم ترحيل طلب (على سبيل المثال، تحميل ملف) التي تتجاوز قيمة maxRequestLength، لا يتم عرض صفحة خطأ مخصصة. بدلاً من ذلك، سيعرض Microsoft Internet Explorer رسالة خطأ "يتعذر العثور على الملقم أو DNS".

إذا أردت تغيير هذا الإعداد لكل من الكمبيوتر وليس فقط تطبيق ASP.NET، يجب تعديل الملف Machine.config.

بشكل افتراضي، يتم تعيين العنصر < هتبرونتيمي > المعلمات التالية في الملف 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 غيغابايت (GB). ومع ذلك، معالجة عامل ASP.NET يستخدم أكثر من 1 غيغابايت بسبب تجزئة الذاكرة ومراقبة الصحة فقط.


خلال عملية التحميل، يقوم ASP.NET بتحميل الملف بأكمله في الذاكرة قبل أن يمكن المستخدم من حفظ الملف إلى القرص. لذلك، قد يتم إعادة المعالجة بسبب سمة memoryLimit العلامة processModel في الملف Machine.config. تحدد السمة memoryLimit يمكن استنفاد نسبة الذاكرة الفعلية معالجة عامل ASP.NET قبل أن يتم تلقائياً إعادة استخدام العملية. إعادة تدوير منع تسرب الذاكرة يسبب تعطل ASP.NET أو توقفه عن الاستجابة.

بالإضافة إلى ذلك، عوامل أخرى تلعب دوراً في حجم الملف الأقصى الذي يمكن تحميله. تتضمن هذه العوامل الذاكرة المتوفرة والمساحة المتوفرة على القرص الثابت، وسرعة المعالج وحركة مرور شبكة الاتصال الحالية. ومع النقل المنتظم للملفات التي يتم تحميلها، توصي Microsoft باستخدام أقصى حجم ملف في المجموعة من 10 إلى 20 ميغابايت (MB). إذا قمت بتحميل الملفات نادراً ما، قد يكون الحجم الأقصى للملف 100 ميغا بايت.

ملاحظة: يمكن تحميل الملفات التي يزيد حجمها عن 100 ميغا بايت في ASP.NET. ومع ذلك، توصي Microsoft باتباع أحجام تحميل الملف الأقصى المذكورة في هذه المقالة. لتحديد أحجام الملفات أكثر دقة، إجراء اختبار تحمل على أجهزة الكمبيوتر التي تكون مماثلة لتلك التي سيتم استخدامها في الإنتاج.

قد تلاحظ رسائل الخطأ التالية إذا واجهت حدود أحجام الملفات أثناء عملية تحميل الملفات:
  • لا يمكن عرض الصفحة.
  • يتم تطبيق ملقم متوفر
    في سجل الأحداث، تكون رسالة الخطأ مشابهة لما يلي:
  • نوع System.OutOfMemoryException تم استثناء.
قد تجد أيضا أن عمليات التحميل هذه تتم ببطء شديد. إذا شاهدت عملية Aspnet_wp.exe في إدارة مهام Windows، فسوف تلاحظ أن تغير الدلتا الذاكرة 64 كيلوبايت كل ثانية 1 و 2. اعتماداً على حجم الملف، قد يؤدي هذا التأخير معالجة عامل ASP.NET إعادة التدوير بسبب خطأ في ريسبونسيديدلوك.

المراجع

لمزيد من المعلومات، قم بزيارة مواقع ويب شبكة مطوري Microsoft (MSDN) التالية؛العودة إلى أعلى
خصائص

رقم الموضوع: 323246 - آخر مراجعة: 15‏/01‏/2017 - المراجعة: 1

تعليقات