كنت أرغب في الأصل في استخدام AJAX لتحميل الملفات دون تحديث، لكنني اكتشفت لاحقًا أنه ليس من السهل تنفيذه. بعد البحث عبر الإنترنت لفترة طويلة، وجدت أخيرًا تطبيق "AJAX زائف". والآن سأقوم بنشر الكود الفعلي الخاص بي القراء.
نحتاج أولاً إلى ملف HTML أو JSP تم تحميله، كما يلي:
<FORM METHOD = "POST" ACTION = "../servlet/FileUploadServlet" enctype = "multipart/form-data" target = "hidden_frame" onSubmit = "showmsg ()؛" style = "margin:0؛padding:0" >
<نوع الإدخال = "ملف" اسم = "ملف" نمط = "العرض: 450">
<نوع الإدخال = "مخفي" اسم = "فعل" قيمة = "تحميل">
<INPUT type="submit" value="تحميل ملف"><span id="msg"></span>
<ر>
<font color="red">يدعم تحميل ملفات JPG، JPEG، GIF، BMP، SWF، RMVB، RM، AVI</font>
<iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
</النموذج>
من بينها، تعتبر سمة TARGET للنموذج [b] مهمة جدًا [/ b]. قم بإرسال إجراء النموذج إلى IFRAME المخفي للتنفيذ، ثم قم بملء العملية في MSG عند العودة، رمز SERVLET المماثل هو يلي:
doPost باطلة عامة (طلب HttpServletRequest، استجابة HttpServletResponse)
يلقي IOException، ServletException {
PrintWriter out = Response.getWriter();
Response.setCharacterEncoding("utf-8");
Response.setHeader("Charset"،"utf-8");
Response.setHeader("Cache-Control"، "no-cache")؛
String filepath = ""،msg = ""، ext = ""؛
SmartUpload su = new SmartUpload();
نجاح منطقي = صحيح؛
. . . . . .
يحاول{
su.initialize(getServletConfig(),request,response);
su.setMaxFileSize(102400000);
su.setTotalMaxFileSize(102400000);
su.setAllowedFilesList(mediaExt+"،+flashExt+"،+imgExt);
su.setDeniedFilesList("exe,bat,");
su.upload();
لـ (int i=0;i<su.getFiles().getCount();i++)
{
com.jspsmart.upload.File file = su.getFiles().getFile(i);
إذا استمر (file.isMissing()) ؛
String fileName=UploadFileUtils.returnRandomFileName(file.getFileExt());
ext=file.getFileExt().toLowerCase();
. . . . . . . . . . .
msg="<a href="#">تم التحميل بنجاح!</a>";
}
}catch(SmartUploadException مقاضاة){
succ=false;
msg="<font color=red>فشل التحميل: يرجى التحقق من امتداد الملف أو حجم الملف!</font>";
}قبض(استثناء على سبيل المثال){
succ=false;
msg="<font color=red>فشل التحميل: يرجى التحقق من امتداد الملف أو حجم الملف!</font>";
ex.printStackTrace();
}
msg=Escape.escape(msg);
إذا (نجاح)
out.println("parent.document.getElementById('msg').innerHTML = unescape('"+msg+"');parent.backCallIframe('"+Escape.escape(ext)+"','"+Escape. escape(filepath)+"')");
آخر
out.println("parent.document.getElementById('msg').innerHTML = unescape('"+msg+"');");
out.Close();
}