هناك نوعان من تنزيلات ملفات الويب. واحد هو أن الملف موجود في دليل الموقع. يمكنك تنزيله عن طريق إدخال مسار الملف مباشرة في المتصفح ، مثل http://www.xxx.com/file.zip. نوع آخر هو أن الملف ليس في دليل موقع الويب أو يتم إنشاء الملف ديناميكيًا (تقارير التصدير أو Excel Excel ، إلخ). في هذه الحالة ، يجب تحقيق تنزيل الملف من خلال إخراج الاستجابة. DownloadUtils هي فئة أداة تنزيل ملف الويب Java توفر مجموعة متنوعة من الطرق الثابتة لتنزيل تنزيل الملف.
حزمة com.rhui.util ؛ استيراد java.io.bufferedInputStream ؛ استيراد java.io.bufferedOutputStream ؛ استيراد java.io.file ؛ استيراد java.io.fileInputStream ؛ استيراد java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.io.outputStream ؛ استيراد java.net.urlencoder ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد org.apache.commons.lang3.StringUtils ؛ / *** ملف تنزيل الملف فئة*/ فئة عامة DownloadUtils {/ *** تنزيل الملف الترميز* يخبر هذا الترميز المتصفح طريقة الترميز لاسم الملف لمنع رمز مشوّه عند تنزيل أسماء الملفات الصينية*/ private Static String charsing = "UTF-8" ؛ / *** تنزيل الملف* param response* param filepath مسار الملف على الخادم ، بما في ذلك اسم الملف*/ تنزيل الفراغ الثابت العام (httpservletresponse response ، string filepath) {file file = file new (filepath.toString ()) ؛ تنزيل (استجابة ، ملف ، فارغ ، الترميز) ؛ } /*** تنزيل الملف* param استجابة* param filepath مسار الملف على الخادم ، بما في ذلك اسم الملف* param filename اسم الملف الذي تم تنزيله إلى المتصفح. إذا كنت لا تريد اسم الملف الذي تم تنزيله بواسطة المتصفح إلى نفس اسم الملف على الخادم ، فيرجى تعيين هذه المعلمة */ تنزيل الفراغ العام الثابت (httpservletresponse ، string filepath ، string filename) {file file = filepath.toString ()) ؛ تنزيل (استجابة ، ملف ، اسم الملف ، الترميز) ؛ } /*** تنزيل الملف* param استجابة* param filepath مسار الملف على الخادم ، بما في ذلك اسم الملف* param filename اسم الملف الذي تم تنزيله إلى المتصفح. إذا كنت لا تريد تنزيل اسم الملف بواسطة المستعرض إلى نفس اسم الملف على الخادم ، فيرجى تعيين هذه المعلمة* param تشفير اسم الملف الترميز*/ تنزيل الفراغ الثابت العام (httpservletresponse ، وسلسلة filepath ، اسم ملف السلسلة ، ترميز السلسلة) تنزيل (استجابة ، ملف ، اسم الملف ، الترميز) ؛ } /** * تنزيل الملف * param استجابة * ملف ملف * param * param filename اسم الملف الذي تم تنزيله إلى المتصفح. إذا كنت لا تريد اسم الملف الذي تم تنزيله بواسطة المستعرض إلى نفس اسم الملف على الخادم ، فيرجى تعيين هذه المعلمة */ تنزيل الفراغ العام الثابت (httpservletresponse ، ملف الملف) {download (response ، file ، null ، الترميز) ؛ } /*** تنزيل الملف* param استجابة* ملف ملف* param* param filename اسم الملف الذي تم تنزيله إلى المتصفح. إذا كنت لا تريد اسم الملف الذي تم تنزيله بواسطة المتصفح إلى الخادم ، فيرجى تعيين هذه المعلمة */ تنزيل الفراغ الثابت العام (HttPservletResponse Response ، ملف الملف ، اسم ملف السلسلة) {download (response ، file ، filename ، الترميز) ؛ } /*** تنزيل الملف* param استجابة* param file file* param filename اسم الملف الذي تم تنزيله إلى المتصفح. إذا كنت لا تريد تنزيل اسم الملف بواسطة المستعرض إلى نفس اسم الملف على الخادم ، فيرجى تعيين هذه المعلمة* param تشفير اسم الملف الترميز*/ public static void download (httpservletresponse response ، file file ، string filensed ، string inchoding) {if (file == null || file.exists () } // إذا لم تحدد اسم الملف للتنزيل إلى المتصفح ، فاستخدم الاسم الافتراضي للملف if (stringUtils.IsBlank (filename)) {fileName = file.getName () ؛ } try {inputStream هو = جديد fileInputStream (ملف) ؛ تنزيل (استجابة ، هو ، اسم الملف ، الترميز) ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} / *** تنزيل الملف* param استجابة* param هو دفق إدخال الملف* param filename اسم الملف* throws ioException* / public static void download (httpservletresponse response ، inputStream is ، filename) } / *** تنزيل الملف* param استجابة* param هو دفق إدخال الملف* param filename تم تنزيل اسم الملف* param تشفير تنسيق الترميز* / public static static void (httpservletresponse response ، inputStream IS ، string filename ، string inchoding) } BufferedInputStream BIS = NULL ؛ OutputStream OS = NULL ؛ bufferedoutputstream bos = null ؛ حاول {bis = جديد bufferedInputStream (IS) ؛ OS = response.getOutputStream () ؛ BOS = جديد bufferedOutputStream (OS) ؛ استجابة. استجابة. setcharacterencoding (الترميز) ؛ استجابة. Byte [] Buffer = New Byte [1024] ؛ int len = bis.read (buffer) ؛ بينما (len! = -1) {bos.write (buffer ، 0 ، len) ؛ len = bis.read (buffer) ؛ } bos.flush () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ } أخيرًا {if (bis! = null) {try {bis.close () ؛ } catch (ioException e) {}} if (is! = null) {try {is.close () ؛ } catch (ioException e) {}}}} السلسلة الثابتة العامة getencoding () {return envoding ؛ } public static void setencoding (سلسلة ترميز) {downloadUtils.encoding = الترميز ؛ }}إذا تم حفظ الملف في دليل غير موقع على الخادم
String filepath = "c: //file.zip" ؛ تنزيل.
إذا كان الملف دفق إدخال
// هو تدفق إدخال الملف // اسم الملف هو اسم الملف الذي تم تنزيله بواسطة Browser // الترميز هو اسم الملف لمنع الرموز المشوهة عندما يكون هناك صينية في ملف FileName = "file.zip" ؛ سلسلة الترميز = "UTF-8" ؛ تنزيل.
قم بتنزيل الملفات في Servlet
حزمة com.rhui.web.servlet ؛ استيراد java.io.ioException ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.annotation.webservlet ؛ استيراد javax.servlet.http.httpservlet ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد com.rhui.util.DownloadUtils ؛ webservlet ("/download/servlet") تنزيل الفئة العامة يمتد httpservlet {private static final long serialversionuid = 1L ؛ خدمة void المحمية (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servleTexception ، ioException {string filepath = "c: //file.zip" ؛ تنزيل. }} ملاحظة: تنزيل الصورة (بما في ذلك وظيفة ارتباط مضاد للسرقة)
حزمة cn.itcast.day06.web.servlet ؛ استيراد java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.io.outputstream ؛ استيراد java.net.urlencoder ؛ استيراد javax.servlet.servletcontext ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservlet ؛ import javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.httpletresponse ؛ يمتد تنزيلات الفئة العامة httpservlet {public void dogge (httpservletrequest request ، httpservletresponse) رمي servletexception ، ioException {// تنفيذ وظيفة سلسلة مضادة للسرقة // الحصول على رأس المرجع لشرح أين يأتي الزائر من enterer required. if (enderer == null ||! reparer.startswith ("http: // localhost")) {// إنه thief thief review.sendRedirect ("/day06/index.jsp") ؛ يعود ؛ } // حل مشكلة استجابة الاستجابة الصينية المشوهة. . . // اقرأ بيانات الصورة وأرسلها إلى سلسلة IE Browser WebPath = "/Download/beauty.jpg" ؛ // ما يعادل مسار تطبيق الويب servletContext الحالي = super.getServletContext () ؛ inputStream in = servletContext.getResourCeasStream (WebPath) ؛ outputStream Out = response.getOutputStream () ؛ int len ؛ Byte [] Buffer = New Byte [1024] ؛ بينما ((len = in.read (buffer))! =-1) Out.write (buffer ، 0 ، len) ؛ } public void dopost (httpservletrequest request ، httpservletresponse) يلقي servletexception ، ioException {doget (request ، response) ؛ }}