1. الطريقة الأكثر مباشرة وبساطة هي وضع عنوان الملف مباشرة في رابط على صفحة html. عيب ذلك هو أن مسار الملف على الخادم مكشوف، ولا يمكن تنفيذ عناصر التحكم الأخرى (مثل الأذونات) على تنزيلات الملفات. لن أكتب مثالاً هنا
2. من جانب الخادم، يتم تحويل الملف إلى دفق إخراج وكتابته للاستجابة، ويتم إحضار الملف إلى المتصفح مع الاستجابة، ويطالب المتصفح المستخدم بما إذا كان يرغب في حفظ الملف محليًا. (المثال أدناه)
<%
Response.setContentType(fileminitype);
Response.setHeader("الموقع"،اسم الملف);
Response.setHeader("Cache-Control", "max-age=" + CacheTime);
Response.setHeader("Content-Disposition"، "attachment; filename=" + filename); // يجب ترميز اسم الملف (utf-8)
Response.setContentLength(filelength);
OutputStreamputStream = Response.getOutputStream();
InputStream inputStream = new FileInputStream(filepath);
بايت[] المخزن المؤقت = بايت جديد[1024];
كثافة العمليات أنا = -1;
بينما ((i = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, i);
}
inputStream.flush();
outputStream.Close();
inputStream.Close();
inputStream = null
%>
3. نظرًا لأنه JSP، هناك طريقة أخرى وهي استخدام التطبيق الصغير لتنزيل الملفات. ومع ذلك، يجب على العميل أولاً أن يثق ببرنامجك الصغير، والذي سيقبل تدفق البيانات المرسل بواسطة servlet ويكتبه محليًا.
مثال على جانب servlet
خدمة باطلة عامة (HttpServletRequest req، HttpServletResponse res)
يرمي ServletException، IOException {
res.setContentType("نص/عادي");
OutputStreamputStream = null;
يحاول {
outputStream = res.getOutputStream();
popFile(srcFile,outputStream));//اكتب الملف باستخدام مسار الملف srcFile فيoutputStream.
} قبض (IOException ه) {
printStackTrace();
}
}
مثال على الجانب JApplet
URLConnection يخدع؛
يحاول {
con = url.openConnection();//url هو عنوان URL للخدمة المسماة SERVLET مثل http://localhost:8080/sendDateSevlet.do
con.setUseCaches(false);
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestProperty("نوع المحتوى"،
"التطبيق/الدفق الثماني");
InputStream in = con.getInputStream();
ProgressMonitorInputStream PMInputStream = جديد ProgressMonitorInputStream(
الجزء، "تنزيل محتوى الملف من الخادم"، في)؛
ProgressMonitor pMonitor =pmInputStream
.getProgressMonitor();
pMonitor.setMillisToDecideToPopup(3);
pMonitor.setMillisToPopup(3);
String localfilepath = localstr + filename;//localfilepath المسار المحلي، مجلد ملف localstr، اسم الملف اسم الملف المحلي
if(saveFilsaveFilee(localfilepath,pmInputStream)){ // الطريقة saveFilsaveFilee تكتب دفق الإدخالpmInputStream إلى الملف localfilepath.
openLocalFile(localfilepath);
}
4. بالمناسبة، تم أيضًا نشر رمز JApplet لتحميل الملفات.
مثال جانبي لـ JApplet
URLConnection con؛
يحاول {
con = url.openConnection();//url هو عنوان URL للخدمة المسماة SERVLET مثل http://localhost:8080/sendDateSevlet.do
con.setUseCaches(false);
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestProperty("نوع المحتوى"،
"التطبيق/الدفق الثماني");
OutputStream out = con.getOutputStream();
String localfilepath = localstr + filename; //localfilepath المسار المحلي، مجلد ملف localstr، اسم الملف المحلي
getOutputStream(localfilepath,out);// يكتب الملف getOutputStream الملف localfilepath إلى دفق الإخراج للخارج.
InputStream in = con.getInputStream();
عودة صحيحة؛
}قبض (IOException ه) {
System.out.println("خطأ في تحميل الملف!");
printStackTrace();
}
مثال على كود جانب servlet
خدمة باطلة عامة (HttpServletRequest req، HttpServletResponse res)
يرمي ServletException، IOException {
res.setContentType("نص/عادي");
InputStream inputStream = null;
يحاول {
inputStream = res.getInputStream();
writefile(srcFile, inputStream);// احفظ دفق الإدخال inputStream في الملف باستخدام مسار الملف srcFile
} قبض (IOException ه) {
printStackTrace();
}
} //
ملخص الخدمة النهائية: في نقل الملفات، يوجد في شكل دفق، وعلى القرص الصلب، يوجد في شكل ملف. كل ما علينا فعله هو إرسال الدفق وقراءة الدفق من خلال HttpServletRequest وHttpServletResponse، أو الاستجابة والطلب. وكذلك العمليات التي تحول الملفات إلى تدفقات أو التدفقات إلى ملفات.