การอัปโหลดและดาวน์โหลดไฟล์
แผนกต้อนรับ:
1. วิธีการส่ง: โพสต์
2. มีไฟล์ฟอร์มที่อัปโหลดไฟล์ในแบบฟอร์ม: <อินพุต type = "ไฟล์" />
3. ระบุประเภทของแบบฟอร์ม:
ประเภทเริ่มต้น: enctype = "แอปพลิเคชัน/x-www-form-urlencoded"
ประเภทการอัปโหลดไฟล์: Multipart/Form-Data
fileupload
มันมักจะใช้ในการพัฒนาฟังก์ชั่นการอัปโหลดไฟล์และ Apache ยังมีส่วนประกอบการอัปโหลดไฟล์!
ส่วนประกอบ fileupload:
1. ดาวน์โหลดซอร์สโค้ด
2. แนะนำไฟล์ JAR ในโครงการ
Commons-FileUpload-1.2.1.jar [แพ็คเกจการอัปโหลดไฟล์ Core Jar Core Jar]
Commons-io-1.4.jar [คลาสเครื่องมือที่เกี่ยวข้องกับการเย็บปักถักร้อยสำหรับการประมวลผลไฟล์]
ใช้:
คลาสสาธารณะ UploadServlet ขยาย httpservlet {// upload ไดเรกทอรี, บันทึกทรัพยากรที่อัพโหลดโมฆะ public doGET (คำขอ httpservletrequest, httpservletresponse การตอบสนอง) โยน servletexception, ioexception {/************ โรงงาน = ใหม่ diskFileItemFactory (); // 2. สร้างไฟล์อัพโหลดไฟล์หลักเครื่องมือคลาส ServletFileUpload อัปโหลด = ใหม่ servletFileUpload (โรงงาน); // 1 ตั้งค่าขนาดสูงสุดที่อนุญาตสำหรับไฟล์เดียว: 30mupload.setFilesizeMax (30*1024*1024); 80Mupload.SetSizEmax (80*1024*1024); // 3. ตั้งค่าการเข้ารหัสชื่อไฟล์ของแบบฟอร์มอัปโหลด // เทียบเท่ากับ: request.Setcharacterencoding ("UTF-8"); Upload.SetheAderencoding ("UTF-8"); // 3. พิจารณาว่า: แบบฟอร์มปัจจุบันเป็นแบบฟอร์มการอัปโหลดไฟล์หรือไม่หาก (อัปโหลด. ismultipartContent (คำขอ)) {// 4. แปลงข้อมูลที่ร้องขอเป็นวัตถุ fileItem รายการ) {// การตัดสิน: ข้อมูลข้อความปกติถ้า (item.isformfield ()) {// สตริงข้อมูลข้อความปกติ fieldName = item.getFieldName (); // รูปแบบองค์ประกอบชื่อสตริงเนื้อหา = item.getString (); // ชื่อองค์ประกอบแบบฟอร์มข้อมูลที่สอดคล้องกัน //item.getString("utf-8 "); ระบุการเข้ารหัส System.out.println (fieldName + "" + เนื้อหา);} // อัปโหลดไฟล์ (สตรีมไฟล์) ---> อัปโหลดไปยังไดเรกทอรีอัปโหลดอื่น ๆ {// สตริงข้อมูลข้อความปกติ fieldName = item.getFieldName (); // รูปแบบองค์ประกอบชื่อสตริงชื่อ = item.getName (); // ชื่อสตริงชื่อไฟล์ = item.getString (); // ชื่อองค์ประกอบแบบฟอร์ม, ประเภทสตริงข้อมูลที่สอดคล้องกัน = item.getContentType (); // ประเภทไฟล์ inputStream ใน = item.getInputStream (); // อัปโหลดสตรีมไฟล์/** 4. การเปลี่ยนชื่อชื่อไฟล์* สำหรับผู้ใช้ที่แตกต่างกัน readme.txt ไฟล์ไม่ต้องการเขียนทับ! * การประมวลผลพื้นหลัง: เพิ่มแท็กที่ไม่ซ้ำกันให้กับผู้ใช้!* /// a แบบสุ่มสร้าง id แท็กสตริงที่ไม่ซ้ำกัน = uuid.randomuuid (). toString (); // b ชื่อ splice ที่มีชื่อไฟล์ = id + "#" + name; // รับการอัปโหลดฐานพา ธ พา ธ พัทเบส = getServletContext (). getRealPath ("/อัปโหลด"); // สร้างไฟล์ไฟล์เป้าหมาย = ไฟล์ใหม่ (พา ธ ชื่อ); // คลาสเครื่องมือไฟล์อัปโหลดรายการ item.delete (); // ลบไฟล์ชั่วคราวที่สร้างโดย System.out.println ();}}} else {system.out.println ("รูปแบบปัจจุบันไม่ใช่แบบฟอร์มการอัปโหลดไฟล์การประมวลผลล้มเหลว!");}} catch (Exception e) {E.printStackTrace () ioexception, unsupportencodingexception {/*request.getParameter (""); // get/postrequest.getQueryString (); // รับข้อมูลที่ส่งโดย get request.getInputStream (); // รับข้อมูลที่ส่งโดยโพสต์*// ****************** รับข้อมูลแบบฟอร์มอัปโหลดไฟล์ด้วยตนเอง ********************************************************************* รับแบบฟอร์มข้อมูลสตรีมอินพุทสตรีมใน = request.getInputStream (); // 2 แปลงสตรีม InputStreamReader Instream = new InputStreamReader (ใน "UTF-8"); // 3 bufferedReader reader = bufferedReader ใหม่ (stream); // สตริงข้อมูลเอาต์พุต str = null; ในขณะที่ ((str = reader.readline ())! = null) {system.out.println (str);} // close reader.close (); การตอบสนอง) โยน servletexception, ioexception {this.doget (คำขอ, การตอบสนอง);}}กรณี:
index.jsp
<body> <a href = "$ {pageContext.request.contextpath} /upload.jsp"> การอัปโหลดไฟล์ </a> <a href = "$ {pageContext.request.contextpath}/fileservlet? method = downlistupload.jsp
<body> <form name = "frm_test" action = "$ {pageContext.request.contextpath}/fileservlet? method = upload" method = "post" enctype = "multipart/form-data"> <%-<อินพุตประเภท = "hidden" ชื่อ " <input type = "file" name = "file_img"> <br/> อินพุต type = "submit" value = "ส่ง"> </form> </body>fileservlet.java
/*** กระบวนการอัพโหลดและดาวน์โหลด*@author jie.yuan **/ไฟล์ระดับสาธารณะ Fileservlet ขยาย httpservlet {โมฆะสาธารณะ doget (httpservletrequest คำขอ, httpservletresponse การตอบกลับ ("อัปโหลด" .equals (เมธอด)) {// อัปโหลดอัปโหลด (คำขอ, การตอบกลับ);} อื่นถ้า ("downlist" .equals (วิธีการ)) {// ป้อนรายการดาวน์โหลด downlist (คำขอ, ตอบกลับ);} ถ้า ("ลง". httpservletResponse การตอบสนอง) พ่น servletexception, ioexception {ลอง {// 1. สร้างวัตถุโรงงาน fileitemfactory โรงงาน = ใหม่ diskfileitemfactory (); // 2. ไฟล์อัพโหลดไฟล์หลัก // ไฟล์ขนาดไฟล์เดียวอัพโหลด SetsizeMax (50*1024*1024); // การอัพโหลดขนาดไฟล์รวมทั้งหมด Setheaderencoding ("UTF-8"); // การประมวลผลการเข้ารหัสไฟล์ภาษาจีน // ตัดสินถ้า (upload.ismultipartContent (คำขอ)) {// 3. แปลงข้อมูลการร้องขอเป็นรายการรวบรวมรายการ <fileitem> list = upload.parserequest (คำขอ); // traversal สำหรับ (รายการ fileitem ค่าสตริงค่า = item.getString (); System.out.println (value);} // รายการไฟล์อื่น {/************ การอัปโหลดไฟล์ ************************************************* รับชื่อสตริงชื่อไฟล์ = item.getName (); // --- จัดการปัญหาการอัปโหลดชื่อไฟล์ซ้ำ --- // a1 รับ id mark string id = uuid.randomuuid (). toString (); // a2 ชื่อไฟล์ splice ชื่อ = id + "#" + ชื่อ; // b. รับสตริงการอัปโหลดสตริง basepath = getServletContext (). getRealPath ("/upload"); // c สร้างวัตถุไฟล์ที่จะอัปโหลดไฟล์ไฟล์ = ไฟล์ใหม่ (basepath, ชื่อ); // d อัปโหลด item.write (ไฟล์); item.delete (); // ลบไฟล์ชั่วคราวที่สร้างขึ้นเมื่อส่วนประกอบกำลังทำงาน}}}}} catch (Exception e) {E.printStackTrace ();}}/*** 2. ป้อนรายการดาวน์โหลด*/โมฆะส่วนตัวลง (httpservlet อัพโหลดไดเรกทอรีแล้วบันทึก; ข้ามไปที่รายการ down.jsp เพื่อแสดง // 1 เริ่มต้นแผนที่การรวบรวมแผนที่ <ชื่อไฟล์ที่มีแท็กที่ไม่ซ้ำกันชื่อไฟล์สั้น>; แผนที่ <สตริงสตริง> fileNames = new hashmap <สตริงสตริง> (); // 2 รับไดเรกทอรีอัปโหลดและชื่อไฟล์ของไฟล์ทั้งหมดภายใต้สตริง bathpath = getServletContext (). getRealPath ("/อัปโหลด"); // ไฟล์ไดเรกทอรีไฟล์ = ไฟล์ใหม่ (bathpath); // ในไดเรกทอรีชื่อไฟล์ทั้งหมด [] = file.list (); // traversal i ++) {// สตริงชื่อเต็มชื่อ filename = list [i]; // สตริงชื่อสั้น ๆ shortname = filename.substring (filename.lastindexof ("#")+1); // encapsulate filenames.put (filename, shortname);}} // 3 request.getRequestDispatcher ("/downlist.jsp"). ไปข้างหน้า (คำขอ, การตอบกลับ);}/*** 3. จัดการดาวน์โหลด*/โมฆะส่วนตัวลง (httpservletrequest Request, httpservletResponse ตอบกลับ request.getParameter ("filename"); filename = สตริงใหม่ (filename.getBytes ("iso8859-1"), "utf-8"); // รับสายการอัปโหลดพา ธ สตริง basepath = getServletContext () getRealPath ("/อัปโหลด"); ชื่อไฟล์คือภาษาจีนการเข้ารหัส URL จะต้องดำเนินการ filename = urlencoder.encode (filename, "UTF-8"); // ตั้งส่วนหัวการตอบกลับสำหรับการดาวน์โหลด setheader ("เนื้อหา-การจัดสรร", "filename =" + filename); = -1; ในขณะที่ ((len = in.read (b))! = -1) {out.write (b, 0, len);} // close out.close (); in.close ();} โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {this.doget (คำขอ, การตอบสนอง);}}}การพัฒนาจดหมาย
งานเตรียมการก่อสร้างสิ่งแวดล้อม:
1. สร้างเซิร์ฟเวอร์เมลในเครื่อง
Easymail Server, eyoumailserversetup.exe
2. สร้างบัญชีอีเมลใหม่
จางซานส่งอีเมลไปที่ Li Si
ขั้นตอนที่ 1:
สร้างชื่อโดเมนใหม่: เครื่องมือการตั้งค่าเซิร์ฟเวอร์ป้อน itcast.com ในกล่องชื่อโดเมนเดียว
ขั้นตอนที่ 2:
สร้างบัญชีอีเมลใหม่: [email protected]
3. ติดตั้ง foxmail
กำหนดค่าเซิร์ฟเวอร์ส่งอีเมล (SMTP): localhost 25
เซิร์ฟเวอร์รับอีเมล (POP3): LocalHost 110
สร้างบัญชีใหม่และคุณสามารถรับอีเมลได้!
สังเกต
สังเกต
หากเป็นโครงการเว็บเนื่องจาก Javaee มาพร้อมกับฟังก์ชั่นอีเมลอาจมีปัญหา!
เราต้องใช้ฟังก์ชั่นไฟล์ mail.jar ของเราเอง! คุณต้องลบแพ็คเกจอีเมลใน Javaee!
ใช้:
สำหรับการพัฒนา Javamail ก่อนอื่นแนะนำไฟล์ JAR:
activation.jar [ถ้าคุณใช้ JDK1.6 หรือสูงกว่าคุณไม่สามารถใช้ไฟล์ jar นี้] mail.jar [ส่งแพ็คเกจหลักทางอีเมล]/*** 1 ส่งอีเมลปกติ*@author jie.yuan **/คลาสสาธารณะ App_sendmail {@testpublic void testsend () คุณสมบัติพารามิเตอร์จดหมาย prop = คุณสมบัติใหม่ (); prop.put ("mail.transport.protocol", "smtp"); // ระบุโปรโตคอล prop.put ("mail.smtp.host", "localhost"); // โฮสต์ stmp.qq.comprop.put ("mail.smtp.port", 25); // พอร์ต prop.put ("mail.smtp.auth", "true"); // การตรวจสอบรหัสผ่านผู้ใช้ prop.put ("mail.debug", "true"); // Debug Mode // 1 สร้างเซสชันของเซสชันเซสชันเมล = เซสชัน getDefaultInstance (prop); // 2 สร้าง Mail Body Object (วัตถุอีเมลทั้งหมด) ข้อความ mimeMessage = new mimeMessage (เซสชัน); // 3 ตั้งค่าพารามิเตอร์ตัวอักษรจดหมาย: //3.1 ชื่อเรื่องข้อความ SetsUbject ("อีเมลแรกของฉัน"); // 3.2 อีเมลส่งเวลาข้อความ SetsentDate (วันที่ใหม่ ()); // 3.3 Message.Setsender (ใหม่ InternetAddress ("[email protected]); // 3.4 ผู้รับ InternetAddress ("[email protected]")); // 3.5 content message.settext ("สวัสดีมันถูกส่งเรียบร้อยแล้ว! ข้อความ ... "); // ข้อความอีเมลข้อความธรรมดาธรรมดา savechanges (); // บันทึกอีเมล (ไม่บังคับ) // 4 ส่ง Transport Transfer = session.getTransport (); trans.connect ("จาง", "888"); // ส่งจดหมายไปยัง trans.sendMessage (ข้อความ, message.getAllRecipients ()); trans.close ();}}}}}ด้วยภาพ
/*** อีเมลพร้อมทรัพยากรรูปภาพ*@author jie.yuan **/คลาสสาธารณะ app_2sendwithimg {// พารามิเตอร์การเริ่มต้นคุณสมบัติคงที่คุณสมบัติคงที่ prop; // ผู้ส่ง internetaddress ส่วนตัวคงที่ sendman = null; Static {prop = properties ใหม่ () // ระบุโปรโตคอล prop.put ("mail.smtp.host", "localhost"); // โฮสต์ stmp.qq.comprop.put ("mail.smtp.port", 25); // ระบุโปรโตคอล prop.put ("mail.smtp.port", 25); // ระบุโปรโตคอล prop.put ("mail.smtp.port", "localhost"); // โฮสต์ stmp.qq.comprop.put ("mail.smtp.port", 25); // พอร์ต prop.put ("mail.smtp.auth", "true"); // การตรวจสอบรหัสผ่านผู้ใช้ prop.put ("mail.debug", "true"); // debug mode ลอง {sendman = new InternetAddress ("[email protected]");} catch (addressexception e) {โยน runtimeException ใหม่ (e);}}@testpublic void testsend () {// 1 mimeMessage (เซสชัน); // 3. ชุดพารามิเตอร์: ชื่อ, ผู้ส่ง, ผู้รับ, เวลาส่งข้อความเนื้อหา SetsUbject ("พร้อมจดหมายรูปภาพ"); message.setsender (Sendman); Message.setRecipient (ผู้รับ TENSTTO.TO, InternetAddress ใหม่ ("[email protected]")); Message.setSentDate (วันที่ใหม่ ());/************************ ชุดเนื้อหาอีเมล: อีเมลผู้ใช้มัลติฟังก์ชั่น (ที่เกี่ยวข้อง) *************************************************************************************** ใหม่ mimebodypart (); mimebodypart resource = new mimebodypart (); // ตั้งค่าเนื้อหาเฉพาะ: ทรัพยากร (รูปภาพ) สตริง filepath = app_2sendwithimg.class.getResource ("8.jpg"). getPath (); dataSource ds = ใหม่ filedataSource (ไฟล์ใหม่ (filepath)); datahandler handler = ใหม่ datahandler // ตั้งชื่อทรัพยากรและอ้างอิงคีย์ต่างประเทศ // ตั้งค่าเนื้อหาเฉพาะ: b เนื้อหาข้อความ setContent ("<img src = 'cid: 8.jpg'/> ตกลง!", "text/html; charset = utf-8"); ที่เกี่ยวข้อง. addbodypart (เนื้อหา); reated.addbodypart (ทรัพยากร);/********* 4.3 เพิ่มอีเมลที่ซับซ้อน session.getTransport (); trans.connect ("จาง", "888"); trans.sendmessage (ข้อความ, message.getAllrecipients ()); trans.close ();}}รูปภาพ + ไฟล์แนบ
/*** 3. อีเมลพร้อมแหล่งข้อมูลภาพและไฟล์แนบ*@author jie.yuan **/คลาสสาธารณะ App_3imgandatta {// พารามิเตอร์การเริ่มต้นพารามิเตอร์ส่วนตัวคงที่ prop; // ผู้ส่ง internetaddress ส่วนตัว sendman = null; คง // ระบุโปรโตคอล prop.put ("mail.smtp.host", "localhost"); // โฮสต์ stmp.qq.comprop.put ("mail.smtp.port", 25); // พอร์ต prop.put ("mail.smtp.auth", "true"); // การตรวจสอบรหัสผ่านผู้ใช้ prop.put ("mail.debug", "true"); // debug mode ลอง {sendman = new InternetAddress ("[email protected]");} catch (addressexception e) {โยน runtimeException ใหม่ (e);}}@testpublic void testsend () {// 1 mimeMessage (เซสชัน); // 3. ชุดพารามิเตอร์: ชื่อ, ผู้ส่ง, ผู้รับ, ส่งเวลา, ข้อความเนื้อหา SetsUbject ("จดหมายพร้อมรูปภาพ"); message.setsender (Sendman); Message.setRecipient (ผู้รับ TENSTTO.TO, InternetAddress ใหม่ ("[email protected]")); message.setsentdate (วันที่ใหม่ ());/** การพัฒนาเมลพร้อมไฟล์แนบ (รูปภาพ)*/// สร้าง mimemultipart mail -miMeMultipart ทั้งหมด = mimemultipart ใหม่ ("mixed"); // -> จดหมายทั้งหมดเป็นไปอย่างรวดเร็ว mimebodypart (); // ตั้งค่าเป็นบล็อกจดหมายรวม mixed.addbodypart (ซ้าย); mixed.addbodypart (ขวา);/******* เอกสารแนบ **********/string attr_path = this.getClass (). getResource ("a.docx"). getPath (); dataSource attr_ds = new filedataSource (ไฟล์ใหม่ DataHandler (attr_ds); Right.setDatahandler (attr_handler); Right.setFilename ("A.Docx");/************************ ชุดเนื้อหาอีเมล: อีเมลผู้ใช้มัลติฟังก์ชั่น (เกี่ยวข้อง) **************************** ---> ตั้งค่าไปทางซ้าย setContent (เกี่ยวข้อง); // 4.2 สร้างเนื้อหาบล็อกจดหมายอเนกประสงค์ = ข้อความบนทรัพยากรด้านซ้าย + ภาพบนเนื้อหา mimeBodyPart ด้านขวา = ใหม่ mimeBodyPart (); ทรัพยากร mimeBodyPart = ใหม่ mimeBodyPart (); // ตั้งเนื้อหาเฉพาะ: ทรัพยากร (รูปภาพ) สตริง filepath = app_3imgandatta.class.getResource ("8.jpg"). getPath (); dataSource ds = ใหม่ filedataSource (ไฟล์ใหม่ (filepath)); datahandler handler = ใหม่ datahandler // ตั้งชื่อทรัพยากรและอ้างอิงคีย์ต่างประเทศ // ตั้งค่าเนื้อหาเฉพาะ: b เนื้อหาข้อความ setContent ("<img src = 'cid: 8.jpg'/> ok!", "text/html; charset = utf-8"); reated.addbodypart (เนื้อหา); reated.addbodypart (ทรัพยากร); // 5 "888"); trans.sendMessage (ข้อความ, message.getAllRecipients ()); trans.close ();}}ข้างต้นเป็นรหัสตัวอย่างสำหรับการอัปโหลดและดาวน์โหลดไฟล์ Java และส่งและรับอีเมลที่แนะนำให้คุณ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!