เขียนก่อน:
ในช่วงไม่กี่วันที่ผ่านมาฉันได้ศึกษาการอัปโหลดไฟล์ webploader บล็อกก่อนหน้านี้บันทึกตัวอย่างของการใช้ webploader เพื่ออัปโหลดไฟล์ วันนี้ฉันจะบันทึกตัวอย่างของการอัปโหลดชิ้นส่วนและจุดพัก ใน Blog Park ฉันได้ดูข้อมูลบางอย่าง โดยทั่วไปการประมวลผลแบ็กเอนด์ของข้อมูลคือ Servlets หรือ SpringMVC เนื่องจากโครงการล่าสุดเป็น struts2 เสมอเราจะใช้การกระทำใน struts2 เพื่อประมวลผลข้อมูลเพื่อให้ได้ผลของการอัปโหลดไฟล์เป็นชิ้น ๆ
1. การอัปโหลด Shard คืออะไร?
ตามชื่อแนะนำมันหมายถึงการแบ่งไฟล์เป็นชิ้นนั่นคือปล่อยให้ไฟล์แบ่งออกเป็นไฟล์ขนาดเล็กหลายไฟล์แล้วอัปโหลด ข้อดีของสิ่งนี้คือการอำนวยความสะดวกในการอัปโหลดไฟล์ขนาดใหญ่
2. แนวคิดทั่วไปสำหรับการอัปโหลดของ Shard:
1. บนหน้าแผนกต้อนรับเลือกไฟล์และคลิกปุ่มเพื่ออัปโหลด
2. WebPloader แบ่งไฟล์ที่อัปโหลดเป็นหมายเลขที่ระบุและส่งไปยังเซิร์ฟเวอร์แบ็กเอนด์ทีละตัว
3. เซิร์ฟเวอร์ได้รับไฟล์ขนาดเล็กที่แบ่งออกและเก็บไว้ในโฟลเดอร์ชั่วคราว
4. หลังจากเซิร์ฟเวอร์ได้รับไฟล์ขนาดเล็กที่แบ่งออกแล้วหน้าเบื้องหน้าจะดำเนินการฟังก์ชั่นการอัปโหลดที่ประสบความสำเร็จ
5. ในฟังก์ชั่นการอัปโหลดที่ประสบความสำเร็จส่งคำขอไปยังเซิร์ฟเวอร์และขอรวมไฟล์ขนาดเล็กเข้ากับไฟล์ทั้งหมด
6. พื้นหลังของเซิร์ฟเวอร์รวมไฟล์และลบไฟล์ชั่วคราวที่เก็บไฟล์ขนาดเล็กหลังจากการผสานเสร็จสมบูรณ์
หลังจากทำความเข้าใจกับกระบวนการทั่วไปของการอัปโหลดของ Shard โปรดไปที่การสาธิตโดยตรง
หน้าแผนกต้อนรับ:
<%@ page contentType = "text/html; charset = utf-8" language = "java"%> <%string scheme = request.getScheme (); String servername = request.getServerName (); String ContextPath = request.getContextPath (); int port = request.getServerport (); // การเข้าถึงเว็บไซต์และเส้นทางสตริง baseUrl = Scheme + ": //" + servername + ":" + พอร์ต + บริบท request.setAttribute ("baseUrl", baseUrl);%> <html> <head> <title> ตัวอย่างง่าย ๆ ของการอัปโหลดไฟล์ด้วยการแยกส่วน </title> <%-แนะนำ CSS styles-%> <link href = "$ {baseUrl} type = "text/css"/> <script src = "$ {baseUrl} /ligerui2/jquery/jquery-1.9.0.min.js" type = "text/javascript"> </script> src = "$ {baseUrl} /webupuploader0.1.5/webuploader.min.js"> </script> <script type = "text/javascript"> $ (function () {/* สำหรับการสร้างการอัปโหลด เป็นเรื่องง่ายที่จะเพิกเฉย ตั้งค่าชื่อไฟล์อัพโหลดไฟล์ หากเปิดใช้งานการอัปโหลดของ Shard จะไม่ จำกัด จำนวนการอัปโหลดในเวลาเดียวกันมันจะทำให้พื้นหลังได้รับการยอมรับโดยพื้นหลังที่ไม่สอดคล้องกัน ข้อผิดพลาดในการจัดระเบียบใหม่ และอัปโหลดอีกครั้งก่อนที่จะอัพโหลด! ข้อกำหนดของโครงการ ในช่วงเวลาการอัพโหลดไฟล์ ตรรกะเฉพาะ ... console.log ('อัพโหลดความสำเร็จ .../n'); * 1024 * 1024)) ชื่อไฟล์: file.name}, ฟังก์ชั่น (ข้อมูล) {}); ความสำเร็จหรือความล้มเหลว // การประมวลผลโลจิสติก .. });}); </div> </div> </body> </html>แบ็กเอนด์การกระทำ:
/** * คำอธิบาย: com.ims.Action * ผู้แต่ง: Eleven * วันที่: 2017/12/26 10:50 */@คอนโทรลเลอร์ ("FileAction") คลาสสาธารณะ FileAction {/ * พารามิเตอร์ที่เกี่ยวข้องสำหรับไฟล์ขนาดเล็กแต่ละไฟล์ที่ใช้เพื่อรับคำขอแบ่งส่วน * // // // ชื่อไฟล์สตริงส่วนตัว uploadfilename; // อัปโหลดประเภทสตริงส่วนตัว UploadContentType; /** * ตัวแปรต่อไปนี้เป็นแบบสาธารณะมีพารามิเตอร์มากเกินไปดังนั้นฉันไม่ต้องการตั้งค่าเป็นส่วนตัวจากนั้นเขียนวิธีการรับและตั้งค่า * เพียงแค่ใช้สาธารณะเพียงแค่ขี้เกียจ */// หมายเลขไฟล์ Public String Guid; // Merge and Split ใช้สำหรับการรับและส่งคำขอรวมชื่อไฟล์สตริงสาธารณะ // ชื่อไฟล์สตริงสาธารณะชิ้น; // หมายเลขเซ็กเมนต์ // เมื่ออัปโหลดไฟล์ใน Shards วิธีนี้จะถูกเรียกทุกครั้งที่มีการอัพโหลดไฟล์ขนาดเล็กซึ่งไม่แตกต่างจากไฟล์บันทึกทั่วไปโมฆะ public void uploadfile2 () โยนข้อยกเว้น {string str = "d:/upload44/divide/"; // การบันทึกไฟล์พา ธ // บันทึกพา ธ ของแต่ละไฟล์ขนาดเล็กสตริง realpath = str + guid + "/" + chunk; ไฟล์ tmp = ไฟล์ใหม่ (realpath); fileutils.copyfile (อัปโหลด, tmp); System.out.println ("อัปโหลดไฟล์"+UploadFileName+"ซึ่งบล็อกซึ่ง:"+chunk+", ขนาด:"+(upload.length ()/1024/1024)+"m"); } // ไฟล์รวมโมฆะสาธารณะ mergefile () พ่นข้อยกเว้น {String path = "D:/upload44/Merge/"; // สร้าง Folder Merge Folder (PATH) .MKDIR (); // สร้างไฟล์ที่รวมไฟล์ newfile = ไฟล์ใหม่ (พา ธ + ชื่อไฟล์); if (! newfile.exists ()) {newfile.createnewfile (); } fileOutputStream outputStream = ใหม่ fileOutputStream (newFile, true); // เพิ่มไฟล์ต่อท้ายไปยังไบต์ [] byt = byte ใหม่ [10 * 1024 * 1024]; int len; FileInputStream temp = null; // ไฟล์ Shash สำหรับ (int i = 0; i <integer.parseint (chunks); i ++) {// "d:/upload44/divide/" + guid + "/" + i เพื่อบันทึกเส้นทางของไฟล์ขนาดเล็ก ในขณะที่ ((len = temp.read (byt))! = -1) {system.out.println (len); OutputStream.write (byt, 0, len); } temp.close (); } // เมื่อการเขียนภาคผนวกทั้งหมดเสร็จสิ้นสตรีมสามารถปิด outputstream.close (); // ลบสตริงไฟล์ shard path2 = "d:/upload44/divide/" + guid; fileutils.deletedirectory (ไฟล์ใหม่ (path2)); // ลบเนื้อหาทั้งหมดในไดเรกทอรี System.out.println ("ความสำเร็จ! guid =" + guid + "; chunks =" + chunks + "; filename =" + filename); } ไฟล์สาธารณะ getUpload () {return upload; } โมฆะสาธารณะ setupload (อัปโหลดไฟล์) {this.upload = อัปโหลด; } สตริงสาธารณะ getUploadFileName () {return uploadfilename; } โมฆะสาธารณะ setUploadFileName (สตริง updoadFileName) {this.uploadFileName = uploadFileName; } สตริงสาธารณะ getUploadContentType () {return uploadContentType; } โมฆะสาธารณะ setuploadContentType (สตริง uploadContentType) {this.uploadContentType = uploadContentType; -การกำหนดค่า struts.xml:
<action name = "uploadFile2" method = "uploadFile2"> </action> <action name = "mergefile" method = "mergefile"> </action>
ตกลงที่นี่การอัปโหลดจุดเบรกพอยต์การกระจายตัวของไฟล์อย่างง่ายเสร็จแล้ว
โดยวิธีการที่พื้นหลังจะได้รับพารามิเตอร์ง่ายๆบางอย่างและแน่นอนว่ามีมากกว่าพารามิเตอร์ข้างต้นที่ส่งผ่านจาก webploader ส่วนหน้า ดังนั้นคุณสามารถเรียนรู้ที่จะใช้โหมดการดีบัก F12 เพื่อดูคำขอที่ส่งและพารามิเตอร์คำขอที่เกี่ยวข้อง ฉันจะไม่พูดถึงเรื่องนี้ที่นี่
กำลังใช้งานภาพหน้าจอ:
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น