الأول هو جزء صفحة الويب ، upload_file.jsp
<٪@ page language = "java" image = "java.util.*" pageencoding = "utf-8" ٪> <! > <form action = "uploadfile" method = "post" enctype = "multipart /form-data"> <!-domain-file-> <input type = "file" name = "source" /< /> input type = " إرسال "value =" upload "> </pong> </body> </html>
من أجل شكل تحميل الملف ، يجب تعيين Metho على النشر ، ويجب ضبط enctype على multipart/form-data.
من الكود أعلاه ، يمكنك أن ترى أن هذا النموذج يتم إرساله إلى هذا الإجراء لمعالجة هذا الإجراء.
<action name = "uploadfile"> <result name = "success">/uploadresult.jsp </sults = "fileupload"> <!-الحد من حجم الملف 20m ، الوحدة هي byte-> <sem name = "maximumsize"> 20971520 </param> </interceptor-ref> <!-يجب الإعلان عن التقاطع الافتراضي .
يتم استخدام Interceptor FileUpload لإعداد مسارات التحميل لتقييد أنواع الملفات والحجم.
فيما يتعلق بحجم الملف ، لا يمكن الحصول على <param name = "maximumsize" >> يجب عليك إضافته تحت علامة <struts>
<name constant = "struts.multipart.maxSize" value = "21000000"/>/>
يشير سطر الكود هذا إلى الحد الأقصى لحجم الملف المسموح به لتحميل الملفات في المشروع بأكمله ، أي لا يمكن أن يتجاوز أي حجم ملف تم تحميله في هذا المشروع (حوالي 20 مترًا). الملف المسموح به يتم تحميله افتراضيًا هو 2M ، لذلك هذه طريقة تقوم أيضًا بتكسير قيود الملفات التي يمكنها فقط تحميل ملفات 2M.
فيما يتعلق بنوع الملف ، إذا كنت بحاجة إلى الحد منه كملف صورة ، يمكنك تكوينه مثل هذا
<!-قم بإعداد فقط تحميل ملف الصورة-> <intercepter-ref name = "fileupload"> <soSM name = "leadtypes"> Image/BMP ، Image/X-PNG ، Image/GIF ، Image/JPEG < /< /param> </bincepter-ref> <interceptor-ref name = "defaultStack" /> />
القيمة في التسمية هي أن قيمة الملف هي نوع MIME ، ويمكن العثور على نوع MIME للملف الشائع في ٪ tomcat_home ٪/conf/web.xml.
إذا كنت تريد أن تقتصر على ملف Word ، فيمكنك تكوين <Terecedor> مثل هذا
<!-يسمح التسوية فقط بتحميل مستند Word-> <intercepter-ref name = "fileupload"> <sem name = "leadtypes"> application/msword ، application/vnd.openxmlformats -offic edocument.wordprocessingml.document </param> <param> < /intercepter-ref> <interceptor-ref name = "DefaultStack" />
ومع ذلك ، أشعر أن هذا للحد من نوع الملف ، من الأفضل استخدام JavaScript لتنفيذ القيود في الواجهة الأمامية.
بعد ذلك ، اكتب عملية تحميل ، السمات الخاصة الضرورية اللازمة لتحميلها هي المصدر ، وهو ما يتوافق مع سمة الاسم لمجال الملف في epload_file.js p ، أي قيمة خاصية اسم مجال الملف هي مصدر ، ثم يجب أن يكون هناك بالإضافة إلى ذلك ، هناك سمتان خاصان أكثر أهمية:
Source SourceMename الخاص
السلسلة الخاصة SourceContentType ؛
باختصار ، أي ، على سبيل المثال ، name = "ABC" من مجال الحقل الصيني في epload_file.jsp ، ثم يجب تعريف هذا في الإجراء
ملف خاص ABC ؛
ستحصل ABC تلقائيًا على كائن الملف ليتم تحميله ، وحصل ABCFiLename تلقائيًا على اسم الملف ، ويحصل ABCCONTTYPE تلقائيًا على نوع الملف.
لا بد لي من التركيز على تحميل المسارات.
إذا تم تحميله على المسار المطلق ، فهو جيد جدًا ، ولكن إذا كنت ترغب في التحميل إلى مجلد التحميل في دليل جذر المشروع ، وكيفية الحصول على المسار الكامل لمجلد التحميل هذا؟
لقد حاولت استخدام
servletactionContext.getServletContext ().
ولكن عاد لاغية. تستخدم أيضا
ServleTactionContext.getRequest ().
لا يزال عاد إلى فارغ. لكن التحقق من هذه المشكلة عبر الإنترنت ، يوصي الكثير من الأشخاص بهذه الكتابة ، مما يثبت أنه قد يكون من الممكن في بعض الحالات ، ولكن هناك أشخاص يعودون إلى خالية مثلي. واجهة ServiceContextare. الطريقة المحددة هي كما يلي:
يمتد عملية تحميل الفئة العامة ActionSupport ImvletContext { / ** * حذف الكود الآخر ... void setServletContext (سياق servletContext) {this.context = context ؛}}
ثم استخدم
مسار السلسلة = سياق. getRealPath ("/تحميل") ؛
احصل على مسار مجلد التحميل. ثم قم بتنفيذ التحميل:
!
أنا شخصياً أوصي بهذه الطريقة ، لأن هذه الطريقة يبدو أنها تتجنب المسار الصحيح عندما يتم تعبئة المشروع ونقله إلى بيئات أخرى.
الصق الرمز الكامل للتحميل في Back AploadAction.java
حزمة com.lidi يمتد تحميل الفئة ActionSupport ImvletContear { / ** نوع الملف من نوع الملف ServletContext ؛ / public file getSource () {return source ؛} public void setSource (file source) {this.source = source ؛ سلسلة getSourCeContentType () {return sourceContentType ؛} public voidth e (String sourceContentType) {this.SourCeContentType = sourceContentType ؛} adoverride public setServletContext (servicetxtxt) {this. *الحصول على مسار التحميل: مسار الجذر FORMER* / file savefile = path ، sourceFilename) ؛
تحميل صفحة التحميل exploadresult.jsp
<٪@ page language = "java" image = "java.util. doctype html> <html> <head> <title> نتيجة التحميل </title> </head> <b> اسم الملف: <s: property value = "sourcefilename"/> </p> <p> file النوع: <s: property value = "sourceContentType" /> </p> <p> file: <a href = "upload /<s: property value =" sourceFilename " /"> <s: property = "sourcefi lename" /> </a> </p> </body> </html>
ما سبق هو كل محتويات هذه المقالة.