يعد تحميل الملفات وتنزيلها تقنية غالبًا ما نحتاج إلى استخدامها في عملية تطوير المشروع الفعلية، وفيما يلي عدة طرق شائعة تتضمن المحتويات الرئيسية لهذه المقالة:
1. كيفية حل مشكلة الحد الأقصى لحجم تحميل الملف
2. احفظه على الخادم كملف
3. قم بالتحويل إلى دفق بايت ثنائي وحفظه في قاعدة البيانات وطريقة التنزيل
4. تحميل الموارد على الإنترنت
الجزء 1:
أولاً، دعونا نتحدث عن كيفية حل مشكلة الحد الأقصى لحجم تحميل الملفات في ASP.NET. نحن نعلم أن الحد الأقصى لحجم تحميل الملفات في ASP.NET هو 2M بشكل افتراضي، ويمكننا تخصيصه عن طريق تغيير الويب. الحد الأقصى لحجم الملف هو كما يلي:
<httpRuntime executionTimeout="300" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false"/>بهذه الطريقة، تصبح القيمة القصوى للملف الذي تم تحميله 4M، لكن هذا لا يسمح لنا بتوسيع قيمة MaxRequestLength بشكل لا نهائي، لأن ASP. NET بعد تحميل كافة الملفات في الذاكرة، تتم معالجتها. الحل هو استخدام HttpWorkerRequest الضمني واستخدام أساليب GetPreloadedEntityBody وReadEntityBody لقراءة البيانات في أجزاء من الأنبوب الذي أنشأه IIS لـ ASP.NET. طريقة التنفيذ هي كما يلي:
IServiceProviderprovider=(IServiceProvider)HttpContext.Current;
HttpWorkerRequestwr=(HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));
byte[]bs=wr.GetPreloadedEntityBody();
.
إذا (!wr.IsEntireEntityBodyIsPreloaded())
{
كثافة العمليات=1024;
byte[]bs2=newbyte[n];
بينما (wr.ReadEntityBody(bs2,n)>0)
{
..
}
}سيحل هذا مشكلة تحميل الملفات الكبيرة.
الجزء 2:
بعد ذلك سنقدم كيفية رفع ملف من العميل إلى الخادم على شكل ملف وإرجاع بعض المعلومات الأساسية حول الملف الذي تم تحميله. أولاً، نحدد فئة لتخزين المعلومات حول الملف الذي تم تحميله (مطلوبة عند العودة). .
FileUpLoad للفئة العامة
{
FileUpLoad العام ()
{
}
/**//// <الملخص>
/// تحميل اسم الملف
/// </الملخص>
سلسلة عامة اسم الملف
{
يحصل
{
إرجاع اسم الملف؛
}
تعيين
{
اسم الملف = القيمة؛
}
}
اسم ملف السلسلة الخاصة
/**//// <summary>
/// مسار تحميل الملف
/// </الملخص>
السلسلة العامة FilePath
{
يحصل
{
مسار ملف الإرجاع؛
}
تعيين
{
مسار الملف = القيمة؛
}
}
مسار ملف سلسلة خاصة؛
/**//// <الملخص>
/// امتداد الملف
/// </الملخص>
السلسلة العامة FileExtension
{
يحصل
{
إرجاع امتداد الملف؛
}
تعيين
{
fileExtension = value;
}
}
امتداد ملف السلسلة الخاصة؛
}
بالإضافة إلى ذلك، يمكننا أيضًا تحديد تنسيق الملفات التي تم تحميلها في ملف التكوين (App.Config):
<?xml version="1.0" encoding="gb2312" ?>
<التطبيق>
<فيليوبلواد>
<Format>.jpg|.gif|.png|.bmp</Format>
</FileUpLoad>
</التطبيق>
وبهذه الطريقة يمكننا أن نبدأ بكتابة طريقتنا في رفع الملفات كالتالي:
FileUpLoad العام UpLoadFile(HtmlInputFile InputFile,string filePath,string myfileName,bool isRandom)
{
FileUpLoad fp = new FileUpLoad()
;
سلسلة saveName؛
//
// إنشاء كائن تحميل
//
HttpPostedFile postFile = InputFile.PostedFile
fileName = System.IO.Path.GetFileName(postedFile.FileName);
fileExtension = System.IO.Path.GetExtension(fileName);
//
// تحديد تنسيق الملف بناءً على النوع
//
AppConfig app = new AppConfig();
تنسيق السلسلة = app.GetPath("FileUpLoad/Format");
//
// إذا كان التنسيق غير متطابق، فارجع
//
إذا (format.IndexOf(fileExtension)==-1)
{
throw new ApplicationException("تنسيق البيانات الذي تم تحميله غير قانوني");
}
//
// أنشئ اسم ملف عشوائيًا بناءً على التاريخ والرقم العشوائي
//
إذا (myfileName!= string.Empty)
{
fileName = myfileName;
}
إذا (عشوائي)
{
Random objRand = new Random();
System.DateTime date = DateTime.Now;
// إنشاء اسم ملف عشوائي
saveName = date.Year.ToString() + date.Month.ToString() + date.Day.ToString() + date.Hour.ToString() + date.Minute.ToString()
+ date.Second.ToString() + Convert.ToString(objRand.Next(99)*97 + 100);
fileName = saveName + fileExtension;
}
سلسلة phyPath = HttpContext.Current.Request.MapPath(filePath);
// تحديد ما إذا كان المسار موجودًا، وإذا لم يكن موجودًا، قم بإنشاء المسار
DirectoryInfo upDir = new DirectoryInfo(phyPath);
إذا (!upDir.Exists)
{
upDir.Create();
}
//
//حفظ الملف
//
يحاول
{
fileName
);
fp.FileExtension = fileExtension;
fp.FileName = fileName;
}
يمسك
{
طرح ApplicationException الجديد ("فشل التحميل!")؛
}
// قم بإرجاع معلومات الملف الذي تم تحميله
عودة فب.
}
ثم يمكننا استدعاء هذه الطريقة عند تحميل الملفات وحفظ معلومات الملف المرتجعة في قاعدة البيانات. أما بالنسبة للتنزيل، فما عليك سوى فتح المسار مباشرة وسيكون الأمر على ما يرام.
الجزء الثالث:
نتحدث هنا بشكل أساسي عن كيفية تحميل وتنزيل الملفات في شكل ثنائي. أولا لنتحدث عن التحميل والطريقة هي كما يلي:
البايت العام[] UpLoadFile(HtmlInputFile f_IFile)
{
// احصل على الوصول إلى الملف الذي تم تحميله المحدد من قبل العميل
HttpPostedFile upFile=f_IFile.PostedFile;
// احصل على طول الملف الذي تم تحميله
int upFileLength=upFile.ContentLength;
// احصل على نوع MIME للعميل للملف الذي تم تحميله
سلسلة contentType = upFile.ContentType؛
byte[] FileArray=new Byte[upFileLength];
دفق fileStream=upFile.InputStream;
fileStream.Read(FileArray,0,upFileLength);
تقوم هذه الطريقة بإرجاع دفق البايت الثنائي للملف الذي تم تحميله، حتى نتمكن من حفظه في قاعدة البيانات. لنتحدث عن هذا النوع من التنزيل، قد تعتقد أن التنزيل بهذه الطريقة هو إنشاء صفحة aspx جديدة، ثم إخراج دفق البايت الثنائي في حدث Page_Load() الخاص به، ثم قراءته في الواقع في التطبيق الفعلي، قد يكون هناك خطأ لا يمكن فتح موقع معين، وعادةً ما أستخدم الطريقة التالية:
أولاً، قم بإضافة: إلى Web.config:
<إضافة فعل = "*" مسار = "openfile.aspx" نوع = "RuixinOA.Web.BaseClass.OpenFile، RuixinOA.Web"/>
هذا يعني أنه عندما أقوم بفتح الصفحة openfile.aspx، سيقوم النظام تلقائيًا بتنفيذ الأساليب الموجودة في فئة RuixinOA.Web.BaseClass.OpenFile، ويكون التنفيذ المحدد كما يلي:
باستخدام النظام؛
باستخدام System.Data؛
باستخدام System.Web؛
باستخدام System.IO؛
باستخدام Ruixin.WorkFlowDB؛
useRXSuite.Base;
useRXSuite.Component;
باستخدام مساحة الاسم RuixinOA.BusinessFacade
RuixinOA.Web.BaseClass
{
/**//// <الملخص>
/// وصف موجز لـ NetUFile.
/// </الملخص>
الطبقة العامة OpenFile: IHttpHandler
{
عملية طلب الفراغ العام (سياق HttpContext)
{
// احصل على معلومات الملف المراد تنزيله من قاعدة البيانات
RuixinOA.BusinessFacade.RX_OA_FileManager os = new RX_OA_FileManager();
بيانات EntityData = os.GetFileDetail(id);
if(data != null && data.Tables["RX_OA_File"].Rows.Count > 0)
{
DataRow dr = (DataRow)data.Tables["RX_OA_File"].Rows[0];
context.Response.Buffer = true;
context.Response.Clear();
context.Response.ContentType = dr["CContentType"].ToString();
context.Response.AddHeader("Content-Disposition",attachment;filename=" + HttpUtility.UrlEncode(dr["CTitle"].ToString()));
context.Response.BinaryWrite((Byte[])dr["CContent"]);
context.Response.Flush();
context.Response.End();
}
}
المنطق العام قابل لإعادة الاستخدام
{
الحصول على {العودة الحقيقية؛}
}
}
}
بعد تنفيذ الطريقة المذكورة أعلاه، سيطالب النظام المستخدم باختيار الفتح المباشر أو التنزيل. هذا كل شيء بالنسبة لهذا الجزء.
الجزء 4:
يتحدث هذا الجزء بشكل أساسي عن كيفية تحميل مورد على الإنترنت إلى الخادم. لدينا مقال سابق يوضح بالتفصيل كيفية استخدامه، لذلك لن أقول المزيد هنا.
يرجى الرجوع إلى: تحويل الصفحات الديناميكية إلى تدفقات بايت ثنائية
الجزء 5: الملخص
أقدم اليوم بإيجاز عدة طرق لتحميل وتنزيل الملفات، والتي غالبًا ما تستخدم في تطوير المشروع الفعلي، وآمل أن يتمكن الجميع من تبادل خبراتهم في تطوير المشروع. يرجى تصحيح لي إذا كنت أكتب سيئة، شكرا لك!
البريد الإلكتروني:[email protected]