إنشاء الملفات المؤقتة العامة مع وقت انتهاء الصلاحية

StackOverflow https://stackoverflow.com/questions/1049253

  •  20-08-2019
  •  | 
  •  

سؤال

وأنا بناء تطبيق الويب صغير على WIN2003 مع asp.net 2.0. لست بحاجة لخلق ملفات صغيرة أن أفترض أن يكون الوصول إليها من قبل لشبكة الإنترنت، وافترض أن الملفات لديك 10 دقيقة وقت انتهاء الصلاحية. لم أجد أي دعم لهذا في إطار وبلدي حل آخر أن تتبادر إلى الذهن لديك وظيفة الجدول الذي ينظف ملف من أي وقت مضى X دقيقة. ولكن ما أعتقد أنني لست أول من تواجه هذه المشكلة وأتساءل عما اذا كان هناك أي حلول الذكية الأخرى.

وشكرا مقدما.

هل كانت مفيدة؟

المحلول

ودون معرفة المزيد حول لماذا كنت تفعل هذا، وأعتقد أن الحل الخاص بك من برنامج خارجي لتنظيف الملفات من هو أفضل حل. قد يكون بديلا لتخزين "الملفات" في قاعدة بيانات وإنشاء معالج يقوم باسترداد البيانات من قاعدة البيانات، ولكن فقط إذا لم يتم انتهت صلاحية "ملف". يمكنك بعد ذلك جدولة مهمة نظيفة حتى على قاعدة بيانات أقل بكثير في كثير من الأحيان ومازال يخدم فقط حتى "ملفات" غير منتهية الصلاحية. أن خلق لهم على القرص يجبرك على القيام تنظيف على جدول منتظم للتأكد من أن العناصر منتهية الصلاحية لم تعد متوفرة.

وأنا افترض أنك يمكن أن تفعل معالج مع الملفات الموجودة على القرص وتحقق من تاريخ إنشاء قبل التقديم الملف حتى. في هذه الحالة المجلد الذي يحتوي على ملفات الفعلية سوف تحتاج إلى أن تكون خارج الموقع أو في المنطقة المحظورة التي يحظر الوصول المباشر من المستخدمين العاديين.

نصائح أخرى

ومنذ كان صغيرا، وإذا كنت تريد أن يبقيه بسيط، فقط اطمئنان على كل طلبات N إلى الموقع. إذا كنت تعتقد أن عدد من الملفات لتنظيف ويمكن الحصول على واسع، والتوقف عن تنظيف بعد العثور على عدد قليل لتنظيف والسماح الطلب التالي تنظيف عدد قليل من أكثر. ميزة هي أن لم يكن لديك لإدارة العمل الخارجية (وتثبيته والحفاظ على التوالي، الخ).

وربما ليست فكرة جيدة لموقع كبير.

هل غرض السيطرة على الوصول إلى الملفات إلى المستخدمين البعيدين؟

هل يمكن إنشاء خدمة ويندوز أو التطبيق وحدة التحكم المقرر أن إزالة دوري الدلائل منتهية الصلاحية / الملفات. بدلا من ذلك، هل يمكن أن يكون التطبيق الويب الخاص بك إدارة استجابة ملف بدلا من ربط مباشرة إلى ملفات من صفحة الويب الخاصة بك. وبمجرد أن الملف هو الماضي سن معينة فقط رمز التطبيق ببساطة لن يعود الملف.

وهنا شيء مشابه لما فعلت في الماضي

protected void Button1_Click(object sender, EventArgs e)
        {
            string fileName = @"c:\SecureDirectory\DownloadableFile.txt";
            int exipireMinutes = -10;

            if (System.IO.File.Exists(fileName) && System.IO.File.GetCreationTime(fileName) >= DateTime.Now.AddMinutes(exipireMinutes))
            {
                byte[] fileBinary;
                using (System.IO.FileStream fs = System.IO.File.Open(Server.MapPath(fileName), System.IO.FileMode.Open))
                {
                    fileBinary = new byte[fs.Length];
                    fs.Read(fileBinary, 0, Convert.ToInt32(fs.Length));
                }
                Response.AddHeader("Content-disposition", "attachment; filename=" + fileName);
                Response.ContentType = "application/octet-stream";
                Response.BinaryWrite(fileBinary);
                Response.End();
            }
        }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top