بالنسبة لإصدار Microsoft Visual C# .NET من هذه المقالة، راجع مقالة "قاعدة معارف Microsoft" التالية (قد تحتوي هذه المقالة على ارتباطات إلى محتوى باللغة الإنجليزية (محتوى لم تتم ترجمته بعد)):.
في هذه المهمة
الموجز
توضح هذه المقالة خطوة بخطوة كيفية تحميل ملف إلى خادم ويب باستخدام Visual Basic .NET. تقوم في هذه المقالة بإنشاء ملف ASP.NET (WebForm1.aspx) وملف التعليمات البرمجية في الخلف الخاص به (WebForm1.aspx.vb) لتحميل ملفات إلى دليل يحمل الاسم "بيانات".
عودة إلى الأعلى
إنشاء تطبيق ASP.NET
اتبع الخطوات التالية في Microsoft Visual Studio .NET لإنشاء تطبيق جديد لتحميل ملفات إلى خادم الويب:
-
ابدأ تشغيل Microsoft Visual Studio .NET.
-
من القائمة File (ملف)، أشر إلى New (جديد)، ثم انقر فوق Project (مشروع).
-
في مربع الحوار New Project (مشروع جديد)، انقر فوق Visual Basic Projects (مشروعات Visual Basic) ضمن Project Types (أنواع المشروعات)، ثم انقر فوق ASP.NET Web Application (تطبيق ويب لـ ASP.NET) ضمن Templates (قوالب).
-
في المربع Location (الموقع)، اكتب "محدد مواقع ويب" لإنشاء المشروع. بالنسبة لهذا المثال، اكتب http://localhost/VBNetUpload، الذي يقوم بإنشاء اسم المشروع الافتراضي الذي يكون VBNetUpload. لاحظ أنه يتم تحميل الملف WebForm1.aspx في عرض Designer "المصمم" لبرنامج Visual Studio .NET.
إنشاء مجلد "البيانات"
بعد أن تقوم بإنشاء التطبيق فإنك تقوم بإنشاء الدليل "البيانات" الذي سيقبل الملفات التي يتم تحميلها. يجب تعيين أذونات كتابة لحساب عامل ASPNET بعد إنشاء هذا الدليل.
-
في الإطار Solution Explorer "مستكشف الحلول" لبرنامج Visual Studio .NET، انقر بزر الماوس الأيمن فوق VBNetUpload، ثم أشر إلى Add (إضافة)، ثم انقر فوق New Folder (مجلد جديد). افتراضيًا، يتم إنشاء مجلد جديد يحمل الاسم NewFolder1.
-
لتغيير اسم المجلد بحيث يكون "بيانات"، انقر بزر الماوس الأيمن فوق NewFolder1، ثم انقر فوق Rename (إعادة تسمية)، ثم اكتب بيانات.
-
ابدأ تشغيل "مكتشف Windows"، ثم حدد موقع مجلد النظام الخاص بالملف "بيانات" والذي قمت بإنشائه في الخطوة 2. يقع هذا الملف بشكل افتراضي في المجلد التالي:
C:\Inetpub\wwwroot\VBNetUpload\Data
-
لتغيير إعدادات الأمان لمنح أذونات كتابة للدليل "بيانات"، انقر بزر الماوس الأيمن فوق بيانات، ثم انقر فوق خصائص.
-
في مربع الحوار خصائص بيانات، انقر فوق علامة التبويب أمان، ثم انقر فوق إضافة.
-
في مربع الحوار تحديد مستخدمين ومجموعات انقر فوق حساب ASPNET، ثم انقر فوق إضافة. انقر فوق موافق لإغلاق مربع الحوار تحديد مستخدمين ومجموعات.
-
انقر فوق حساب aspnet_wp account (اسم جهاز الكمبيوتر\ASPNET) أو حساب "خدمة الشبكة" إذا كنت تستخدم Microsoft Internet Information Services (IIS) 6.0 "خدمات معلومات الإنترنت لـ Microsoft"، ثم انقر لتحديد خانات الاختيار السماح للأذونات التالية:
-
القراءة والتنفيذ
-
سرد محتويات المجلد
-
قراءة
-
كتابة
انقر لإلغاء تحديد أي خانات اختيار السماح أو الرفض الأخرى. -
-
انقر فوق موافق لإغلاق مربع الحوار خصائص بيانات. قمت بتعديل أذونات الدليل "بيانات" لقبول ملفات المستخدم التي يتم تحميلها.
تعديل الصفحة WebForm1.aspx
لتعديل تعليمة HTML البرمجية لملف WebForm1.aspx للسماح للمستخدمين بتحميل الملفات، اتبع الخطوات التالية:
-
قم بالعودة إلى مثيل Visual Studio .NET المفتوح. يجب أن تكون الصفحة WebForm1.aspx مفتوحة في إطار "المصمم".
-
لعرض HTML المصدر لصفحة WebForm1.aspx، انقر بزر الماوس الأيمن فوق WebForm1.aspx في إطار "المصمم"، ثم انقر فوق View HTML Source (عرض HTML المصدر).
-
حدد موقع تعليمة HTML البرمجية التالية والتي تحتوي على العلامة <form>:
<form id="Form1" method="post" runat="server">
-
أضف سمة الاسم-القيمة enctype="multipart/form-data" إلى العلامة <form> كالتالي:
<form id="Form1" method="post" enctype="multipart/form-data" runat="server">
-
أضف التعليمة البرمجية التالية بعد علامة <form> المفتوحة:
<INPUT type=file id=File1 name=File1 runat="server" />
<br>
<input type="submit" id="Submit1" value="Upload" runat="server" /> -
تحقق من ظهور علامة <form> لـ 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.vb
لتعديل ملف التعليمات البرمجية في الخلف WebForm1.aspx.vb لقبول البيانات التي يتم تحميلها، اتبع الخطوات التالية:
-
في القائمة View (عرض)، انقر فوق Design (تصميم).
-
انقر نقرًا مزدوجًا فوق Upload (تحميل). يقوم Visual Studio بفتح ملف التعليمات البرمجية في الخلف WebForm1.aspx.vb وإنشاء التعليمة البرمجية للطريقة التالية تلقائيًا:
Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
End Sub -
تحقق من وجود التعليمة البرمجية التالية في مستوى الفئة لملف WebForm1.vb:
Protected WithEvents Submit1 As System.Web.UI.HtmlControls.HtmlInputButton
Protected WithEvents File1 As System.Web.UI.HtmlControls.HtmlInputFileإذا لم تكن هذه التعليمة البرمجية موجودة في الملف، قم بإضافة التعليمة البرمجية إلى الملف بعد السطر التالي:
Inherits System.Web.UI.Page
-
حدد موقع التعليمة البرمجية التالية:
Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
-
اضغط مفتاح "الإدخال" لإضافة سطر فارغ، ثم أضف التعليمة البرمجية التالية:
If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then
Dim fn As String = System.IO.Path.GetFileName(File1.PostedFile.FileName)
Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
Try
File1.PostedFile.SaveAs(SaveLocation)
Response.Write("The file has been uploaded.")
Catch Exc As Exception
Response.Write("Error: " & Exc.Message)
End Try
Else
Response.Write("Please select a file to upload.")
End Ifتقوم هذه التعليمة البرمجية بالتحقق أولاً من اكتمال تحميل ملف. في حالة عدم تحديد ملف، تتلقى الرسالة "Please select a file to upload" (الرجاء تحديد ملف للتحميل). إذا تم تحميل ملف صالح، يتم استخراج اسم الملف الخاص به بواسطة مساحة الاسم System.IO، ويتم تجميع الوجهة الخاصة به في مسار SaveAs. وبعد معرفة الوجهة النهائية، يتم حفظ الملف باستخدام الطريقة File1.PostedFile.SaveAs. ويتم اعتراض أي استثناء، كما يتم عرض رسالة الاستثناء على الشاشة.
-
تحقق من ظهور الروتين الفرعي Submit1 كالتالي:
Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then
Dim fn As String = System.IO.Path.GetFileName(File1.PostedFile.FileName)
Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
Try
File1.PostedFile.SaveAs(SaveLocation)
Response.Write("The file has been uploaded.")
Catch Exc As Exception
Response.Write("Error: " & Exc.Message)
End Try
Else
Response.Write("Please select a file to upload.")
End If
End Sub
اختبار التطبيق
لإنشاء حل Visual Studio .NET الخاص بك ولاختبار التطبيق، اتبع الخطوات التالية:
-
من القائمة Build (إنشاء)، انقر فوق Build Solution (إنشاء الحل).
-
في "مستعرض الحلول"، انقر بزر الماوس الأيمن فوق WebForm1.aspx، ثم انقر فوق View in Browser (عرض في المستعرض).
-
بعد فتح الصفحة WebForm1.aspx في المستعرض، انقر فوق Browse (استعراض).
-
في مربع الحوار Choose File (اختيار ملف)، حدد ملفًا يكون أصغر من ٤ ميغابايت (MB)، ثم انقر فوق Open (فتح).
-
لتحميل الملف، انقر فوق Upload (تحميل). لاحظ أنه يتم تحميل الملف إلى خادم الويب وأنك تتلقى الرسالة "The file has been uploaded" (تم تحميل الملف).
-
قم بالرجوع إلى مثيل "مكتشف Windows" المفتوح، ثم حدد موقع الدليل "بيانات".
-
تحقق من تحميل الملف إلى الدليل "بيانات".
تحميل ملفات أكبر
افتراضيًا، يسمح ASP.NET فقط بتحميل الملفات التي حجمها ٤,٠٩٦ كيلوبايت (أو ٤ ميغابايت [MB]) أو أقل على خادم الويب. لتحميل ملفات أكبر، يجب تغيير المعلمة maxRequestLength للقسم <httpRuntime> في ملف Web.config.
ملاحظة عند تعيين السمة maxRequestLength في الملف Machine.config ونشر طلب (على سبيل المثال، ملف تحميل) يتجاوز قيمة maxRequestLength، يتعذر عرض صفحة أخطاء مخصصة. بدلاً من ذلك، يقوم Microsoft Internet Explorer بعرض رسالة الخطأ "Cannot find server or DNS" (لا يمكن العثور على خادم أو DNS).
إذا أردت تغيير هذا الإعداد لجهاز الكمبيوتر بالكامل وليس تطبيق ASP.NET هذا فقط، يجب عليك تعديل الملف Machine.config.
افتراضيًا، يكون العنصر <httpRuntime> معينًا للمعلمات التالية في الملف Machine.config:
<httpRuntime
executionTimeout="90"
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
/>
يكون الملف Machine.config موجودًا في المجلد \System Root\Microsoft.NET\Framework\رقم الإصدار\Config.
عودة إلى الأعلى
إتمام سرد التعليمات البرمجية
WebForm1.aspx
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="VBNetUpload.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.0">
<meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
<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" enctype="multipart/form-data" method="post" 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.vb
Public Class WebForm1
Inherits System.Web.UI.Page
Protected WithEvents File1 As System.Web.UI.HtmlControls.HtmlInputFile
Protected WithEvents Submit1 As System.Web.UI.HtmlControls.HtmlInputButton
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
End Sub
Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then
Dim fn As String = System.IO.Path.GetFileName(File1.PostedFile.FileName)
Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
Try
File1.PostedFile.SaveAs(SaveLocation)
Response.Write("The file has been uploaded.")
Catch Exc As Exception
Response.Write("Error: " & Exc.Message)
End Try
Else
Response.Write("Please select a file to upload.")
End If
End Sub
End Class
معلومات أخرى
نظريًا، يكون الحجم الأقصى لتحميل الملفات كبيرًا بشكل معقول. مع ذلك، وللحفاظ على كفاءة ASP.NET، لا يمكنك تحميل ملفات كبيرة الحجم للغاية في ASP.NET. تكون لمعالجة عامل ASP.NET مساحة عنوان ظاهرية تبلغ ٢ غيغابايت (GB). بالرغم من ذلك، تستخدم معالجة عامل ASP.NET أكبر بقليل من ١ غيغابايت حرصًا على الكفاءة وتجزئة الذاكرة.
خلال عملية التحميل، يقوم ASP.NET بتحميل الملف كاملاً في الذاكرة قبل أن يتمكن المستخدم من حفظ الملف على القرص. لذا، قد يتم إعادة المعالجة نظرًا لوجود السمة memoryLimit للعلامة
processModel في الملف Machine.config. تحدد السمة memoryLimit النسبة المئوية للذاكرة الفعلية التي يمكن أن تستنفذها معالجة عامل ASP.NET قبل إعادة المعالجة تلقائيًا. تحول إعادة المعالجة دون تسبب تسريبات الذاكرة في تعطل ASP.NET أو توقفه عن الاستجابة.
بالإضافة إلى ذلك، تلعب عوامل أخرى دورًا في الحجم الأقصى للملف الذي يمكن تحميله. تتضمن هذه العوامل الذاكرة المتاحة ومساحة القرص الثابت المتوفرة وسرعة المعالج ومعدل نقل البيانات الحالي داخل الشبكة. ومع النقل المنتظم للملفات التي يتم تحميلها، توصي Microsoft باستخدام الحجم الأقصى للملف والذي يتراوح بين ١٠ إلى ٢٠ ميغابايت. إذا كنت تقوم بتحميل الملفات نادرًا، يمكن أن يصل الحجم الأقصى للملف إلى ١٠٠ ميغابايت.
ملاحظة يمكنك تحميل الملفات التي تكون أكبر من ١٠٠ ميغابايت في ASP.NET. بالرغم من ذلك، توصي Microsoft بالالتزام بالأحجام القصوى لتحميل الملفات الموضحة في هذه المقالة. لتحديد أحجام الملفات بشكل أكثر دقة، قم بإجراء اختبار تحمل على أجهزة الكمبيوتر المشابهة لتلك التي سيتم استخدامها في الإنتاج.
قد تلاحظ رسالتي الخطأ التاليتين في حالة مواجهة حدود حجم الملف أثناء عملية تحميل الملفات:
-
The page cannot be displayed. (يتعذر عرض الصفحة).
-
Server Application is Unavailable (تطبيق الخادم غير متوفر)
تكون رسالة الخطأ في سجل الأحداث مماثلة لما يلي:
-
Exception of type System.OutOfMemoryException was thrown. (تم تحويل الاستثناء من النوع System.OutOfMemoryException).
قد تكتشف أيضًا أن عمليات التحميل هذه تتم ببطء أكبر. إذا لاحظت المعالجة Aspnet_wp.exe في "إدارة مهام Windows"، تلاحظ تغير دلتا الذاكرة بمعدل ٦٤ كيلوبايت كل ثانية أو اثنتين. استنادًا إلى حجم الملف، قد يتسبب هذا التأخير في إعادة إجراء معالجة عامل ASP.NET نظرًا لخطأ responseDeadlock.
مراجع
لمزيد من المعلومات، قم بزيارة مواقع Microsoft Developer Network (MSDN) التالية على الويب: