jQuery Uploadify + Apache Fileupload مثال على تحميل ملف غير متزامن
1. يمكنك تحديد حجم ونوع الملفات التي تم تحميلها، من الناحية النظرية، يمكن تحميل أي نوع من الملفات (يمكنك تكوينه وفقًا لواجهة برمجة التطبيقات)؛
2. يتم استخدام Apache commons-fileupload-1.3.1.jar كمجموعة أدوات التحميل في الخلفية. يدعم هذا المثال عمليات تحميل ملفات متعددة في وقت واحد؛
3. يمكن تحديد دليل تحميل الملف بشكل تعسفي، يرجى تكوينه في web.xml؛
للحصول على تفاصيل حول واجهة برمجة تطبيقات Uploadify، راجع http://www.uploadify.com/documentation/
FileUploadServlet
انسخ رمز الكود كما يلي:
الحزمة com.xiaoxing.upload؛
استيراد java.io.File؛
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* <h1>رفع ملف Apache Fileupload (3-5-2014)</h1>
* <p>1. إذا كنت مهتمًا بهذا المثال وتريد معرفة المزيد، فمرحبًا بك للانضمام إلى مجتمع التعلم عبر الإنترنت لمدرسة Java الخاصة (329232140)</p>
* <p>2. يمكن نقل هذا المثال إلى مشروعك الفعلي مع تعديلات طفيفة. </ص>
*/
الطبقة العامة FileUploadServlet تمتد HttpServlet {
serialVersionUID النهائي الطويل الخاص = 7579265950932321867L؛
// قم بتعيين دليل تحميل الملف الافتراضي (إذا لم تقم بتكوينه في web.xml)
Private String uploadDir = "c:/"; // دليل تحميل الملف
public String tempUploadDir = "c:/"; // الدليل الذي يتم تخزين الملفات فيه مؤقتًا (يتم حذفه تلقائيًا بواسطة المستمع بعد تدمير الجلسة)
/*
* (غير جافادوك)
* @ راجع javax.servlet.GenericServlet#init()
* إذا تم تكوين دليل تحميل الملف في web.xml، فسيتم استخدامه أولاً لتحديد ما إذا كان دليل الملف موجودًا أم لا، فقم بإنشائه.
*/
@تجاوز
init الفراغ العام () يلقي ServletException {
// احصل على دليل القرص الصلب الحقيقي حيث يوجد هذا المشروع
مسار السلسلة = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
path = path.substring(0, path.indexOf("WEB-INF"));
// تحديد ما إذا كان الهدف موجودًا، وإنشائه إذا لم يكن موجودًا
String uploadDir = path.concat(this.getInitParameter("uploadDir"));
String tempUploadDir = path.concat(this.getInitParameter("tempUploadDir"));
الملف f_uploadDir = ملف جديد(uploadDir);
File f_tempUploadDir = new File(tempUploadDir);
إذا (!f_uploadDir.exists()) {
f_uploadDir.mkdirs();
}
إذا (!f_tempUploadDir.exists()) {
f_tempUploadDir.mkdirs();
}
// تعيين قيمة للمتغير
this.uploadDir = uploadDir;
this.tempUploadDir = tempUploadDir;
}
/*
* (غير جافادوك)
* @ راجع javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
* لا تقبل البيانات المقدمة عن طريق طريقة الحصول وإرجاع رمز حالة فشل التحميل.
*/
@تجاوز
doGet باطل محمي (طلب HttpServletRequest، استجابة HttpServletResponse) يطرح ServletException، IOException {
this.setResponse(response);
PrintWriter out = Response.getWriter();
out.print("{/"error/":/"-1/""); // طريقة إرسال غير قانونية
}
/*
* (غير جافادوك)
* @ راجع javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
* عادةً ما يتم تقديم طلبات تحميل الملفات عبر البريد
*/
@تجاوز
doPost باطلة محمية (طلب HttpServletRequest، استجابة HttpServletResponse) يطرح ServletException، IOException {
this.setResponse(response); // قم بتعيين نوع الاستجابة لتحليل الواجهة الأمامية
PrintWriter out = Response.getWriter();
نتيجة السلسلة = ""؛
يحاول {
// تحقق مما إذا كان هذا طلب تحميل ملف
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
إذا (متعدد الأجزاء) {
DiskFileItemFactory Factory = new DiskFileItemFactory(); // إنشاء عنصر ملف يعتمد على قرص المصنع
Factory.setRepository(new File(tempUploadDir)); // تكوين المستودع (عند التأكد من وجود موقع مؤقت آمن)
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1024 * 1024 * 100); // تعيين الحد الإجمالي للحجم المطلوب (يوصى بتعيين الواجهة الأمامية والخلفية بشكل منفصل، لأنه يتم استخدام مكونات إضافية مختلفة في الواجهة الأمامية والخلفية)
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> iter = items.iterator(); // معالجة العناصر التي تم تحميلها
while (iter.hasNext()) { // إذا تم تحميل ملفات متعددة في وقت واحد، فسيتم حفظها بشكل منفصل هنا.
FileItem item = iter.next();
if (!item.isFormField()) { // تصفية الحقول غير المتعلقة بالملف في النموذج
if (!"".equals(item.getName())) { // تصفية الإدخال من نوع غير الملف
String s_name = item.getName(); // احصل على اسم الملف الأصلي
int Position = s_name.lastIndexOf(".");
String s_fileType = s_name.substring(position, s_name. length()); // احصل على لاحقة الملف
تاريخ السلسلة = new SimpleDateFormat("yyyyMMdd").format(new Date());
String s = uploadDir.concat("/").concat(date).concat("/");
// احفظ الملفات في الدلائل حسب التاريخ هنا
ملف sf = ملف (ملفات) جديدة؛
إذا (!sf.exists()) {
sf.mkdirs();
}
String s_filePath = s.concat(UUID.randomUUID().toString()).concat(s_fileType);
مسار الملف = ملف جديد (s_filePath)؛
item.write(path);
النتيجة += s_filePath.concat("،");
} آخر {
النتيجة = ""؛
استراحة؛
}
}
}
} آخر {
النتيجة = ""؛
}
String s_resultJSON = this.jointJSON(result); // الربط يُرجع الواجهة الأمامية JSON
out.print(s_resultJSON);
} قبض (الاستثناء ه) {
printStackTrace();
} أخيراً {
out.flush();
out.Close();
}
}
/**
* قم بلصق JSON وإرجاع اسم الملف ودليل التاريخ للملف المحفوظ إلى الواجهة الأمامية (قد تحتاج الواجهة الأمامية إلى هذا المسار لإكمال عمليات النموذج الأخرى، مثل تخزين مسار الملف إلى قاعدة البيانات)
* سلسلة تنسيق نتيجةparam JSON
* @يعود
* @throws UnsupportedEncodingException
*/
سلسلة خاصة JointJSON (نتيجة سلسلة) تطرح UnsupportedEncodingException {
سلسلة سلسلة = ""؛
إذا (!"". يساوي (النتيجة)) {
String rs[] = result.split("،);
StringBuffer buffer = new StringBuffer("{/"rows/":[");
لـ (int i = 0; i < rs.length; i++) {
String s_tmpName = rs[i];
s_tmpName = s_tmpName.substring(uploadDir. length(), s_tmpName. length());
buffer.append("{/"name/":/"").append(s_tmpName).append("/"}");
}
str = buffer.toString();
str = str.substring(0, str. length() - 1).concat("]}");
} آخر {
str = "{/"خطأ/":/"-2/""; // فشل التحميل
}
شارع العودة؛
}
/**
* اضبط نوع الاستجابة ContentType على "application/x-json"
* استجابة المعلمة
*/
مجموعة الفراغ الخاصة (استجابة HttpServletResponse) {
Response.setCharacterEncoding("UTF-8");
Response.setContentType("application/json;charset=UTF-8");
Response.setHeader("cache-control", "no-cache");
}
}
test_upload.html
انسخ رمز الكود كما يلي:
<!DOCTYPE html>
<أتش تي أم أل>
<الرأس>
<ميتا محارف = "UTF-8">
<title>مثال لتحميل الملفات غير المتزامنة jQuery Uploadify + Apache Fileupload (3-5-2014)</title>
<link rel="stylesheet" type="text/css" href="/js/uploadify/uploadify.css">
<script src="/js/jquery-1.9.0.js"></script>
<script src="/js/uploadify/jquery.uploadify.min.js"></script>
<نوع البرنامج النصي = "نص/جافا سكريبت">
$(وظيفة() {
$('#fileupload').uploadify({
"الطريقة": "النشر"،
'buttonText' : 'ملف تحميل فلاش'،
'fileSizeLimit' : '1024 كيلو بايت'،
'fileTypeExts' : '*.gif;
'swf' : '/js/uploadify/uploadify.swf'،
'uploader' : '/upload'، // هذا هو المسار لتحميل الصور، وهو servlet الذي قمت بتكوينه في web.xml
'onUploadSuccess' : function(file, data, Response) { // تتم معالجة البيانات التي تم إرجاعها بعد تحميل الصورة بنجاح هنا
var ary = eval("(" + data + ")").rows;
for(var i = 0; i < ary.length; i++) {
$("#J_div").append("<img alt='image' src='/upload/images" + ary[i].name + "' width='200px' height='200px'>");
}
}
});
});
</script>
</الرأس>
<الجسم>
<h2>مثال تحميل الملفات غير المتزامنة jQuery Uploadify + Apache Fileupload (3-5-2014)</h2>
<p>1. يمكنك تحديد حجم ونوع الملفات التي تم تحميلها، من الناحية النظرية، يمكن تحميل أي نوع من الملفات (يمكنك تكوينه وفقًا لواجهة برمجة التطبيقات)؛</p>
<p>2. يتم استخدام Apache commons-fileupload-1.3.1.jar كمجموعة أدوات التحميل في الخلفية. يدعم هذا المثال عمليات تحميل ملفات متعددة في وقت واحد؛</p>
<p>3. يمكن تحديد دليل تحميل الملف بشكل عشوائي، يرجى تكوينه في web.xml؛</p>
<p>4. الصور التي تم تحميلها غير موجودة في هذه الصفحة. </ص>
<p>للحصول على تفاصيل حول واجهة برمجة تطبيقات Uploadify، راجع http://www.uploadify.com/documentation/</p>
<p style="color: red">*إذا كنت مهتمًا بهذا المثال وتريد معرفة المزيد، فمرحبًا بك للانضمام إلى مجتمع التعلم عبر الإنترنت لمدرسة Java الخاصة (329232140). </ص>
<input id = "fileupload" type = "file" name = "img" multiple = "multiple"/>
<div id="J_div"></div>
</الجسم>
</html>
web.xml
انسخ رمز الكود كما يلي:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http //java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" بيانات التعريف كاملة = "صحيح" الإصدار = "3.0">
<قائمة ملفات الترحيب>
<welcome-file>test_upload.html</welcome-file>
</welcome-file-list>
<سيرفلت>
<description>سيرفلت مصمم خصيصًا للتعامل مع عمليات التحميل</description>
<servlet-name>FileUploadServlet</servlet-name>
<servlet-class>com.xiaoxing.upload.FileUploadServlet</servlet-class>
<init-param>
<description>الدليل الرسمي حيث يتم تخزين الملفات، يمكنك تكوينه بنفسك</description>
<param-name>uploadDir</param-name>
<param-value>/upload/images/</param-value>
</init-param>
<init-param>
<description>يمكن تكوين الدليل المؤقت حيث يتم تخزين الملفات بنفسك. سيتم حذف الملفات الموجودة فيه تلقائيًا بواسطة المستمع الذي تم تكوينه أدناه. </وصف>
<param-name>tempUploadDir</param-name>
<param-value>/upload/temp</param-value>
</init-param>
</سيرفلت>
<رسم الخرائط servlet>
<servlet-name>FileUploadServlet</servlet-name>
<url-pattern>/تحميل</url-pattern>
</servlet-mapping>
<المستمع>
<description>تنظيف موارد الملفات المؤقتة، تأتي مجموعة الأدوات معها، ولا نحتاج إلى كتابتها</description>
<listener-class>org.apache.commons.fileupload.servlet.FileCleanerCleanup</listener-class>
</المستمع>
</web-app>