هذا موضوع بسيط عن طريقة رفع الملفات الى السيرفر بطريقة امنة
تحت شعار (تبا للاسئلة المكرر)ان استفد من هذا الموضوع اتمنى ان تقوم انت ايضا بكتابة موضوع جديد مختلف لزيادة الحماس عند الاعضاء
و تكون المواضيع المفيدة اكثر من الاسئلة
لنبدا ASP .net وضعت لنا اداه مفيدة جدا لرفع الملفات و هي FileUpload
لتسهيل رفع الملفات
لنبدء بسحب هذا الاداة و وضعها على الصفحة
<asp:FileUpload ID="FileUp" runat="server" Width="350" />
الان لنقوم بوضع زر جديد
<asp:Button ID="UpButtton" runat="server" Text="..رفع.." />
و بعد هذا نقوم بوضع Panel
يحتوي على 3 Labels
<asp:Panel ID="LabelsPanel" runat="server"> <asp:Label ID="TypeLabel" runat="server"/> <br /> <asp:Label ID="NewFileName" runat="server" /> <br /> <asp:Label ID="SizeLabel" runat="server" /> <br /> </asp:Panel>
ثم Label اخر لكتابة الاخطاء و التنبيهات
<asp:Label ID="ErrorLabel" runat="server" ForeColor="Red" />
الان نذهب الى ال Click Event الخاص بالزر
protected void UpButtton_Click(object sender, EventArgs e)
{
if (FileUp.PostedFile.ContentLength != 0)
{
try
{
//نقوم هنا بالتاكد من ان حجم الملف لا يزيد عن 1 ميكا
//1024 × 1024 = 1 ميكا
if (FileUp.PostedFile.ContentLength > 1048576)
{
ErrorLabel.Text = "حجم الملف اكثر من 1 ميكا";
}
else
{
//لجلب المسار الكامل للملف
string DirFullPath = Server.MapPath("./Upload");
// لجلب اسم الملف فقط
string fileName = Path.GetFileName(FileUp.PostedFile.FileName);
//لدمج المسار الكامل مع اسم الملف
string fileFullPath = Path.Combine(DirFullPath, fileName);
//لخزن الملف
FileUp.PostedFile.SaveAs(fileFullPath);
SizeLabel.Text = "حجم الملف: " + FileUp.PostedFile.ContentLength.ToString();
TypeLabel.Text = "نوع الملف: " + FileUp.PostedFile.ContentType;
NewFileName.Text = "اسم الملف: " + FileUp.PostedFile.FileName;
LabelsPanel.Visible = true;
}
}
catch
{
ErrorLabel.Text = "لقد حدث خطأ غير معرف";
}
}
}هنا استخدمت
string fileName = Path.GetFileName(FileUp.PostedFile.FileName);
فقط حتى يقوم بازلة اي مسار غير اسم الملف و يحب ان يكون الاسم اسم منطفي اذا حاول المستخدم بتلاعب باسم الملف فهذه الطريقة سوف تقوم بازالته
ولكن للحماية اكثر سوف نقوم بتغير اسم الملف بالكامل بستخدام ال Guid
سوف افصل هذا الاجراء في فنكشن منفصل
يقوم هذا الفنكشن باعادة المسار الكامل + الاسم الجديد للملف
string GetNewName(string DirPath)
{
string newFileName = Guid.NewGuid().ToString();
string fillPath = Path.Combine(DirPath, newFileName);
return fillPath;
}الان سوف اقوم بتعديل الايفنت
protected void UpButtton_Click(object sender, EventArgs e)
{
if (FileUp.PostedFile.ContentLength != 0)
{
try
{
//نقوم هنا بالتاكد من ان حجم الملف لا يزيد عن 1 ميكا
//1024 × 1024 = 1 ميكا
if (FileUp.PostedFile.ContentLength > 1048576)
{
ErrorLabel.Text = "حجم الملف اكثر من 1 ميكا";
}
else
{
//لجلب المسار الكامل للملف
string DirFullPath = Server.MapPath("./Upload");
// لجلب الاكستنشن فقط
string fileExt = Path.GetExtension(FileUp.PostedFile.FileName);
//لدمج المسار الكامل مع اسم الملف
string fileFullPath = GetNewName(DirFullPath);
//لخزن الملف مع اضافة الاكستينشن
FileUp.PostedFile.SaveAs(fileFullPath + fileExt);
// هنا للاظهار بعض من المعلومات عن الملف و اسمه الجديد
SizeLabel.Text = "حجم الملف: " + FileUp.PostedFile.ContentLength.ToString();
TypeLabel.Text = "نوع الملف: " + FileUp.PostedFile.ContentType;
NewFileName.Text = "اسم الملف: " + Path.GetFileName(fileFullPath);
LabelsPanel.Visible = true;
}
}
catch
{
ErrorLabel.Text = "لقد حدث خطأ غير معرف";
}
}
}واقوم باخفاء الLabelsPanel في كل مرة يحدث ال Page.Load()
protected void Page_Load(object sender, EventArgs e)
{
LabelsPanel.Visible = false;
}اذا استفدت من الموضوع ارجوا ان تقوم انت ايضا بكتابة موضوج جديد حتى لو كان بسيط (اكتب موضوع عن ال Label Control)
و اي سؤال انا حاضر