1. วิธีที่ตรงประเด็นและง่ายที่สุดคือใส่ที่อยู่ไฟล์ลงในลิงก์บนหน้า html โดยตรง ข้อเสียคือเส้นทางของไฟล์บนเซิร์ฟเวอร์ถูกเปิดเผย และการควบคุมอื่นๆ (เช่น สิทธิ์) ในการดาวน์โหลดไฟล์ไม่สามารถทำได้ ฉันจะไม่เขียนตัวอย่างที่นี่
2. ที่ฝั่งเซิร์ฟเวอร์ ไฟล์จะถูกแปลงเป็นเอาต์พุตสตรีม เขียนเป็นการตอบกลับ และไฟล์จะถูกส่งไปยังเบราว์เซอร์พร้อมกับการตอบกลับ (ตัวอย่างด้านล่าง)
-
response.setContentType (ประเภทไฟล์ขนาดเล็ก);
response.setHeader("ตำแหน่ง",ชื่อไฟล์);
response.setHeader("แคช-Control", "max-age=" + cacheTime);
response.setHeader("Content-Disposition", "attachment; filename=" + filename); // ชื่อไฟล์ควรได้รับการเข้ารหัส (utf-8)
response.setContentLength (ความยาวไฟล์);
OutputStream outputStream = response.getOutputStream();
InputStream inputStream = FileInputStream ใหม่ (เส้นทางไฟล์);
ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [1024];
อินท์ i = -1;
ในขณะที่ ((i = inputStream.read (บัฟเฟอร์)) != -1) {
outputStream.write (บัฟเฟอร์, 0, i);
-
เอาท์พุตสตรีม.ฟลัช();
เอาท์พุตสตรีม.ปิด();
inputStream.ปิด();
เอาท์พุตสตรีม = null;
%>
3. เนื่องจากเป็น JSP อีกวิธีหนึ่งคือใช้ Applet เพื่อดาวน์โหลดไฟล์ อย่างไรก็ตาม ลูกค้าจะต้องเชื่อถือแอปเพล็ต Applet ของคุณก่อน ซึ่งจะยอมรับสตรีมข้อมูลที่ส่งโดยเซิร์ฟเล็ตและเขียนลงในเครื่อง
ตัวอย่างด้านเซิร์ฟเล็ต
บริการโมฆะสาธารณะ (คำขอ HttpServletRequest, HttpServletResponse res)
พ่น ServletException, IOException {
res.setContentType(" ข้อความ/ธรรมดา ");
เอาท์พุตสตรีม เอาท์พุตสตรีม = null;
พยายาม {
เอาท์พุตสตรีม = res.getOutputStream();
popFile(srcFile, outputStream));//เขียนไฟล์ด้วยพาธของไฟล์ srcFile ลงใน outputStream
} จับ (IOException จ) {
e.printStackTrace();
-
-
ตัวอย่างด้าน JApplet
URLConnection แย้ง;
พยายาม {
con = url.openConnection();//url เป็น URL ของ SERVLET ที่เรียกว่า เช่น http://localhost:8080/sendDateSevlet.do
con.setUseCaches(เท็จ);
con.setDoInput(จริง);
con.setDoOutput(จริง);
con.setRequestProperty("ประเภทเนื้อหา",
"แอปพลิเคชัน/ออคเต็ตสตรีม");
InputStream ใน = con.getInputStream();
ProgressMonitorInputStream pmInputStream = ProgressMonitorInputStream ใหม่ (
บานหน้าต่าง "การดาวน์โหลดเนื้อหาไฟล์จากเซิร์ฟเวอร์" ใน);
ProgressMonitor pMonitor = pmInputStream
.getProgressMonitor();
pMonitor.setMillisToDecideToPopup(3);
pMonitor.setMillisToPopup(3);
สตริง localfilepath = localstr + ชื่อไฟล์;//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(เท็จ);
con.setDoInput(จริง);
con.setDoOutput(จริง);
con.setRequestProperty("ประเภทเนื้อหา",
"แอปพลิเคชัน/ออคเต็ตสตรีม");
OutputStream ออก = con.getOutputStream();
String localfilepath = localstr + ชื่อไฟล์; //localfilepath local path, โฟลเดอร์ไฟล์ localstr, ชื่อไฟล์ชื่อไฟล์ในเครื่อง
getOutputStream(localfilepath,out);//ไฟล์ getOutputStream เขียนไฟล์ localfilepath ไปยังเอาท์พุตสตรีมเอาท์
InputStream ใน = con.getInputStream();
กลับเป็นจริง;
} จับ (IOException จ) {
System.out.println("ข้อผิดพลาดในการอัพโหลดไฟล์!");
e.printStackTrace();
}
ตัวอย่างโค้ดฝั่งเซิร์ฟเล็ต
บริการโมฆะสาธารณะ (คำขอ HttpServletRequest, HttpServletResponse res)
พ่น ServletException, IOException {
res.setContentType(" ข้อความ/ธรรมดา ");
สตรีมอินพุต สตรีมอินพุต = null;
พยายาม {
inputStream = res.getInputStream();
writefile(srcFile, inputStream);//บันทึกอินพุตสตรีม inputStream ไปยังไฟล์ด้วยพาธของไฟล์ srcFile
} จับ (IOException จ) {
e.printStackTrace();
-
} // สรุปบริการสิ้นสุด
: ในการส่งไฟล์มีอยู่ในรูปแบบของสตรีมและบนฮาร์ดดิสก์มีอยู่ในรูปแบบของไฟล์ สิ่งที่เราต้องทำคือส่งสตรีมและอ่านสตรีมผ่าน HttpServletRequest และ HttpServletResponse หรือตอบกลับและร้องขอ ตลอดจนการดำเนินการแปลงไฟล์เป็นสตรีมหรือสตรีมเป็นไฟล์