محاكاة تحميل ملف واحد بطريقتين، التأثير كما يلي
خطوات التطوير هي كما يلي:
1. أنشئ مشروع ويب جديدًا واستورد الجرار المطلوبة لملفات تحميل struts2، كما هو موضح أدناه
هيكل الدليل
2. إنشاء إجراء جديد
الطريقة الأولى
انسخ رمز الكود كما يلي:
package com.ljq.action;
استيراد java.io.File؛
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("المسلسل")
الطبقة العامة UploadAction تمتد ActionSupport {
صورة الملف الخاص // الملف الذي تم تحميله
سلسلة خاصة imageFileName // اسم الملف
سلسلة خاصة imageContentType؛ // نوع الملف
تنفيذ السلسلة العامة () يلقي استثناء {
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
//د:/Apache-tomcat-6.0.18/webapps/struts2_upload/images
System.out.println("realpath: "+realpath);
إذا (الصورة! = فارغة) {
File savefile = new File(new File(realpath), imageFileName);
إذا (!savefile.getParentFile().exists())
savefile.getParentFile().mkdirs();
FileUtils.copyFile(image, savefile);
ActionContext.getContext().put("message", "تم تحميل الملف بنجاح");
}
إرجاع "النجاح" ؛
}
ملف عام getImage() {
صورة العودة؛
}
مجموعة الفراغ العام (صورة الملف) {
this.image = image;
}
سلسلة عامة getImageFileName () {
إرجاع اسم الملف الصورة؛
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
سلسلة عامة getImageContentType() {
إرجاع imageContentType؛
}
مجموعة الفراغ العام ImageContentType(String imageContentType) {
this.imageContentType = imageContentType;
}
}
الطريقة الثانية
انسخ رمز الكود كما يلي:
package com.ljq.action;
استيراد java.io.File؛
استيراد java.io.FileInputStream؛
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("المسلسل")
الطبقة العامة UploadAction2 تمتد ActionSupport {
// قم بتغليف سمات مجال الملف الذي تم تحميله
صورة ملف خاص؛
// قم بتغليف سمات نوع الملف الذي تم تحميله
سلسلة خاصة imageContentType؛
// قم بتغليف سمات اسم الملف الذي تم تحميله
سلسلة خاصة imageFileName؛
// قبول خصائص حقن التبعية
سلسلة خاصة savePath؛
@تجاوز
تنفيذ السلسلة العامة () {
FileOutputStream fos = null;
FileInputStream fis = null;
يحاول {
// إنشاء دفق إخراج الملف
System.out.println(getSavePath());
fos = new FileOutputStream(getSavePath() + "//" + getImageFileName());
// إنشاء دفق تحميل الملف
fis = new FileInputStream(getImage());
بايت[] المخزن المؤقت = بايت جديد[1024];
إنت لين = 0;
بينما ((لين = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
} قبض (الاستثناء ه) {
System.out.println("فشل تحميل الملف");
printStackTrace();
} أخيراً {
إغلاق (fos، fis)؛
}
عودة النجاح؛
}
/**
* العودة إلى مكان حفظ الملف الذي تم تحميله
*
* @يعود
*/
سلسلة عامة getSavePath () تطرح استثناءً {
return ServletActionContext.getServletContext().getRealPath(savePath);
}
مجموعة الفراغ العامSavePath(سلسلة savePath) {
this.savePath = savePath;
}
ملف عام getImage() {
صورة العودة؛
}
مجموعة الفراغ العام (صورة الملف) {
this.image = image;
}
سلسلة عامة getImageContentType() {
إرجاع imageContentType؛
}
مجموعة الفراغ العام ImageContentType(String imageContentType) {
this.imageContentType = imageContentType;
}
سلسلة عامة getImageFileName () {
إرجاع اسم الملف الصورة؛
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
إغلاق باطل خاص (FileOutputStream fos، FileInputStream fis) {
إذا (فيس! = فارغة) {
يحاول {
fis. Close();
} قبض (IOException ه) {
System.out.println("فشل إغلاق FileInputStream");
printStackTrace();
}
}
إذا (fos ! = فارغة) {
يحاول {
fos. Close();
} قبض (IOException ه) {
System.out.println("فشل إغلاق FileOutputStream");
printStackTrace();
}
}
}
}
ملف التكوين struts.xml
انسخ رمز الكود كما يلي:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE دعامات عامة
"-//مؤسسة برمجيات أباتشي//تكوين DTD Struts 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<الدعامات>
<!-- تحدد هذه السمة لاحقة الطلب التي يجب معالجتها بواسطة Struts2. القيمة الافتراضية لهذه السمة هي الإجراء، أي أن جميع الطلبات المطابقة لـ *.action تتم معالجتها بواسطة Struts2.
إذا كان المستخدم يحتاج إلى تحديد لاحقات طلب متعددة، فافصل بين اللواحق المتعددة بفواصل (،). -->
<الاسم الثابت = "struts.action.extension" value = "do" />
<!-- قم بتعيين ما إذا كان المتصفح يقوم بتخزين المحتوى الثابت مؤقتًا أم لا. القيمة الافتراضية صحيحة (تستخدم في بيئة الإنتاج) -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- عندما يتم تعديل ملف تكوين الدعامات، ما إذا كان النظام سيعيد تحميل الملف تلقائيًا، فإن القيمة الافتراضية تكون خاطئة (تستخدم في بيئة الإنتاج)، فمن الأفضل تشغيلها أثناء مرحلة التطوير -->
<الاسم الثابت = "struts.configuration.xml.reload" value = "true" />
<!-- يُستخدم في وضع التطوير، بحيث يمكن طباعة رسائل خطأ أكثر تفصيلاً -->
<الاسم الثابت = "struts.devMode" value = "true" />
<!--موضوع العرض الافتراضي-->
<اسم ثابت = "struts.ui.theme" value = "بسيط" />
<!--<constant name="struts.objectFactory" value="spring" />-->
<!--حل الرموز المشوشة-->
<الاسم الثابت = "struts.i18n.encoding" value = "UTF-8" />
<!-- حدد الحد الأقصى لعدد البايتات المسموح بها للملفات التي تم تحميلها. القيمة الافتراضية هي 2097152(2M) -->
<الاسم الثابت = "struts.multipart.maxSize" value = "10701096"/>
<!-- قم بتعيين المجلد المؤقت للملفات التي تم تحميلها، ويتم استخدام javax.servlet.context.tempdir افتراضيًا -->
<اسم ثابت = "struts.multipart.saveDir " value = "d:/tmp" />
<اسم الحزمة = "upload" namespace = "/ تحميل" يمتد = "struts-default">
<اسم الإجراء = "*_upload" طريقة = "{1}">
<result name="success">/WEB-INF/page/message.jsp</result>
</أكشن>
</حزمة>
<اسم الحزمة = "upload2" يمتد = "struts-default">
< اسم الإجراء = "upload2" طريقة = "تنفيذ">
<!-- قم بتعيين قيمة سمة savePath ديناميكيًا -->
<param name="savePath">/images</param>
<result name="success">/WEB-INF/page/message.jsp</result>
<result name="input">/upload/upload.jsp</result>
<interceptor-ref name="fileUpload">
<!-- تصفية الملفات -->
<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
<!-- حجم الملف بالبايت -->
<param name="maximumSize">1025956</param>
</interceptor-ref>
<!-- يجب وضع المعترض الافتراضي بعد fileUpload، وإلا فسيكون غير صالح -->
<interceptor-ref name="defaultStack" />
</أكشن>
</حزمة>
</الدعامات>
تحميل صفحة النموذج
انسخ رمز الكود كما يلي:
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<أتش تي أم أل>
<الرأس>
<title>تحميل الملف</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</الرأس>
<الجسم>
<!-- ${pageContext.request.contextPath}/upload/execute_upload.do -->
<!-- ${pageContext.request.contextPath}/upload2/upload2.do -->
<form action="${pageContext.request.contextPath}/upload2/upload2.do"
طريقة enctype = "multipart/form-data" = "post">
الملف: <نوع الإدخال = "ملف" اسم = "صورة">
<نوع الإدخال = "إرسال" القيمة = "تحميل" />
</النموذج>
<br/>
<s:خطأ في الحقل />
</الجسم>
</html>
عرض صفحة النتائج
انسخ رمز الكود كما يلي:
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<أتش تي أم أل>
<الرأس>
<title>تم التحميل بنجاح</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</الرأس>
<الجسم>
تم التحميل بنجاح!
<br/><br/>
<!-- مسار نشر القط ${pageContext.request.contextPath}،
على سبيل المثال: D:/Apache-tomcat-6.0.18/webapps/struts2_upload/ -->
<img src="${pageContext.request.contextPath}/<s:property value="'images/'+imageFileName"/>">
<s:debug></s:debug>
</الجسم>
</html>