บล็อกเกอร์เพิ่งทำงานในโครงการอินทราเน็ตที่สามารถเข้าถึงข้อมูลภายนอกภายในได้ แต่ภายนอกไม่สามารถเข้าถึงข้อมูลภายในซึ่งทำให้ไฟล์ไม่สามารถอัปโหลดได้ ดังนั้นบล็อกเกอร์ใช้วิธีการที่แตกต่างกันและสร้างโฟลเดอร์บนเซิร์ฟเวอร์ท้องถิ่นโดยเฉพาะสำหรับการจัดเก็บข้อมูลที่อัปโหลด
สิ่งแวดล้อม: JDK, Tomcat
1. อัปโหลดไฟล์ในแผนกต้อนรับ (อัปโหลด AJAX)
<input type = "file" name = "AnnexUrl" id = "AnnexUrl" multiple = "multiple"/>
โดยที่ multiple = "multiple" ถูกตั้งค่าเพื่ออัปโหลดหลายไฟล์
function uploadfile () {var files = document.getElementById ("Annexurl") ไฟล์; if (files.length! = 0) {var formData = new formData (); สำหรับ (var i = 0; i <files.length; i ++) {var file = files [i]; formData.Append (file.name, ไฟล์); } $ .ajax ({url: 'cdc/public/savefiles', ประเภท: 'โพสต์', แคช: เท็จ, ข้อมูล: formdata, // พารามิเตอร์นี้ไม่ซ้ำกันกับ jQuery และไม่เป็นอนุกรมเพราะเราไม่ได้เป็นสตริงที่อยู่ที่นี่ ผ่าน ContentType: FALSE, ความสำเร็จ: ฟังก์ชั่น (ข้อมูล) {บันทึก (data.data);}}); } else {บันทึก (); - ที่นี่เราต้องใช้วัตถุ FormData เพื่อห่อหุ้มวัตถุไฟล์ วิธีการบันทึก () ใช้เพื่อบันทึกพา ธ ไฟล์ที่ส่งคืนหลังจากอัปโหลดและบันทึกลงในฐานข้อมูลเพื่อดาวน์โหลดง่าย
2. รับไฟล์ในพื้นหลังและอัปโหลดไปยังเซิร์ฟเวอร์
// อัปโหลดหลายไฟล์ส่งคืนคอลเลกชันของวัตถุ (ที่อยู่แนบชื่อ) @RequestMapping (value = "saveFiles", method = requestMethod.post) @ResponseBody สาธารณะ jsonObject saveFiles (httpservletRequest คำขอ jsonobject (httpservletrequest ลอง {request.setcharacterencoding ("UTF-8"); } catch (unsupportencodingexception e) {e.printstacktrace (); } คอลเลกชัน <part> ชิ้นส่วน = null; ลอง {parts = request.getParts (); } catch (ioexception e) {e.printstacktrace (); } catch (servletexception e) {e.printstacktrace (); } iterator <part> iterator = parts.iterator (); // คอลเลกชันของชื่อกลับไปที่รายการเบื้องหน้า <string> list = new ArrayList <> (); ในขณะที่ (iterator.hasnext ()) {ส่วนส่วน = iterator.next (); // สร้างชื่อไฟล์จริงที่เก็บไว้จริง (ไม่ซ้ำกัน) // ฉันไม่ทราบว่าทำไมการอัปโหลดไฟล์จะต้องมีชื่อไฟล์ที่ได้รับมิฉะนั้นไวยากรณ์ของชื่อไฟล์ชื่อไดเรกทอรีหรือแท็กเสียงไม่ถูกต้อง ไม่มีข้อ จำกัด ดังกล่าวในการอัปโหลดรูปภาพ // ชื่อไฟล์บันทึกฐานข้อมูลและใช้เพื่อแสดงชื่อสตริง = part.getName (); realname สตริง = uuid.randomuuid (). toString () + ชื่อ; list.add (ชื่อ + "&&" + realname); ///home/tomcat/apache-tomcat-9.0.1/files string realpath = "d:" + file.separator + "apache-tomcat-8.5.15" + file.separator + "ไฟล์"; // string realPath = "C:" + file.Saperator + "XHJ224" + file.Sparator + "ซอฟต์แวร์" + file.Saperator + "Apache-tomcat-9.0.1" + file.Saperator + "ไฟล์"; // string realpath = file.Saperator + "home" + file.Saperator + "tomcat" + file.Saperator + "Apache-tomcat-9.0.1" + file.Separator + "ไฟล์"; ไฟล์ไฟล์ = ไฟล์ใหม่ (RealPath); // ถ้าไดเรกทอรีไม่มีอยู่ (! file.isdirectory ()) {// สร้างไฟล์อัพโหลดไฟล์ directory file.mkdirs (); } // พา ธ จริงไปยังสตริงการจัดเก็บไฟล์ filePath = RealPath + file.Sparator + realName; ลอง {part.write (filepath); } catch (ioexception e) {e.printstacktrace (); }} jsonObject.put ("ข้อมูล", รายการ); กลับ JsonObject; - รายการคอลเลกชันเพิ่มสตริงที่ประกบกันโดยชื่อไฟล์และชื่อไฟล์จริงซึ่งจำเป็นในภายหลัง RealName คือการป้องกันความขัดแย้งระหว่างชื่อไฟล์ที่อัปโหลดหลายชื่อ RealPath เป็นพา ธ การบันทึกไฟล์ ระบบปฏิบัติการที่แตกต่างกันมีเส้นทางที่แตกต่างกัน RealPath อยู่ภายใต้ Tomcat เพื่ออำนวยความสะดวกในการพอร์ตโครงการ
โดยที่ file.Sparator เป็นตัวคั่นพา ธ ซึ่งสามารถระบุได้โดยอัตโนมัติว่าระบบปฏิบัติการใดและใช้ตัวคั่นพา ธ ที่แตกต่างกัน (Windows คือ '/', Linux คือ '/') ในที่สุดก็ส่งคืนรายการไปยังแผนกต้อนรับ
บทความนี้ได้รวบรวมไว้ใน "สรุปเทคนิคการดำเนินการอัพโหลด Java" และทุกคนยินดีที่จะเรียนรู้และอ่าน
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น