كيفية تعيين المسار إلى "مسار السياق" للملفات التي تم تحميلها باستخدام Apache Common FileUpload؟

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

سؤال

أنا أستخدم مكتبة Apache Common FileUpload مع NetBeans 6.8 + Glassfish

لذلك كتبت:

File uploadedFile = new File("WEB-INF/upload/"+fileName);
session.setAttribute("path",uploadedFile.getAbsolutePath());
item.write(uploadedFile);

لكنني لاحظت أن المكتبة تحفظ الملفات التي تم تحميلها في مجلد الأسماك الزجاجية ، هنا ما أحصل عليه عند طباعة المسار المطلق للملف الذي تم تحميله:

C:\Program Files\sges-v3\glassfish\domains\domain1\WEB-INF\upload\xx.rar 

سؤالي:

  • كيف يمكنني إجبار ملف fileupload الشائع على حفظ الملف الذي تم تحميله في مسار بالنسبة لمسار servlet الحالي ، لذلك لست بحاجة إلى تحديد المسار بأكمله؟ هل هذا ممكن ؟
هل كانت مفيدة؟

المحلول

ال java.io.File يعمل على نظام ملفات القرص المحلي ولا يعرف شيئًا على الإطلاق عن السياق الذي يعمل فيه. يجب ألا تتوقع أن تجد الموقع "الصحيح" عند تمرير أ مسار الويب النسبي في. سيصبح بالنسبة إلى دليل العمل الحالي الذي يعتمد على كيفية بدء البيئة. أنت لا تريد أن تعتمد على ذلك.

يمكنك استخدام ServletContext#getRealPath() لتحويل مسار ويب نسبي إلى مسار نظام ملفات القرص المحلي المطلق.

String relativeWebPath = "/WEB-INF/uploads";
String absoluteFilePath = getServletContext().getRealPath(relativeWebPath);
File uploadedFile = new File(absoluteFilePath, FilenameUtils.getName(item.getName()));
// ...

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top