วิธีการอัปโหลดและดาวน์โหลดไฟล์ในพื้นหลัง SpringBoot?
โครงการล่าสุดที่เกี่ยวข้องกับการอัปโหลดและดาวน์โหลดไฟล์ การอัปโหลด Front-End ใช้ปลั๊กอิน Baidu WebPloader การใช้ปลั๊กอินนี้ยังอยู่ระหว่างการวิจัยและจะถูกจัดสรรและบันทึกในอนาคต บทความนี้ส่วนใหญ่แนะนำการประมวลผลการอัปโหลดและดาวน์โหลดไฟล์ในพื้นหลัง Springboot
อัปโหลดไฟล์เดียว
// ไฟล์เดียวอัปโหลด @RequestMapping (value = "/upload")@responseBodyPublic String อัปโหลด (@RequestParam ("ไฟล์") ไฟล์ MultipArtFile) {ลอง {ถ้า (file.isEmpty ()) {return "ไฟล์ว่างเปล่า"; } // รับชื่อสตริงชื่อไฟล์ชื่อ filename = file.getoriginalfilename (); logger.info ("ชื่อไฟล์ที่อัปโหลดคือ:" + ชื่อไฟล์); // รับชื่อต่อท้ายของสตริงไฟล์ suffixName = filename.substring (filename.lastindexof (".")); logger.info ("ชื่อต่อท้ายของไฟล์คือ:" + suffixname); // ตั้งค่าสตริงการจัดเก็บข้อมูลไฟล์ filePath = "D: // AIM //"; PATH String = FilePath + ชื่อ FileName + SuffixName; ไฟล์ dest = ไฟล์ใหม่ (พา ธ ); // ตรวจพบว่าไดเรกทอรีมีอยู่ถ้า (! dest.getParentFile (). มีอยู่ ()) {dest.getParentFile (). mkdirs (); // สร้างโฟลเดอร์ใหม่} file.transferto (dest); // เขียนไฟล์เพื่อส่งคืน } catch (unlueLstateException e) {e.printStackTrace (); } catch (ioexception e) {e.printstacktrace (); } return "upload ล้มเหลว";}หากคุณต้องการแก้ไขพา ธ ไฟล์และชื่อไฟล์เพียงแค่แก้ไข FilePath และชื่อไฟล์
อัพโหลดไฟล์หลายไฟล์
// multi-file upload @requestmapping (value = "/uploadmore", method = requestmethod.post) @ResponseBodyPublic สตริง HandleFileUpload (httpservletRequest Request) {list <multipartfile> ไฟล์ = (multiparthtpservletRequest) ไฟล์ multipartFile = null; stream bufferedOutputStream = null; สำหรับ (int i = 0; i <files.size (); ++ i) {file = files.get (i); String filePath = "D: // AIM //"; if (! file.isempty ()) {ลอง {byte [] bytes = file.getBytes (); สตรีม = ใหม่ bufferedOutputStream (ใหม่ fileOutputStream (ไฟล์ใหม่ (filePath + file.getOriginalFileName ())))); // ตั้งค่าพา ธ ไฟล์และชื่อสตรีมเขียน (ไบต์); // เขียนถึง Stream.close (); } catch (exception e) {stream = null; ส่งคืน "th" + i + "การอัปโหลดไฟล์ล้มเหลว ==>" + e.getMessage (); }} else {return "th" + i + "ล้มเหลวเนื่องจากไฟล์ว่างเปล่า"; }} ส่งคืน "อัปโหลดสำเร็จ";}ดาวน์โหลดไฟล์
// ไฟล์ดาวน์โหลดรหัสที่เกี่ยวข้อง @requestmapping ("/ดาวน์โหลด") การดาวน์โหลดสตริงสาธารณะ (คำขอ httpservletRequest, การตอบกลับ httpservletResponse) {สตริง filename = "AIM_Test.txt"; ไฟล์ใหม่ (RealPath, ชื่อไฟล์); if (file.exists ()) {response.setContentType ("แอปพลิเคชัน/force-download"); // ตั้งค่าการดาวน์โหลดที่ถูกบังคับโดยไม่ต้องเปิดการตอบสนอง Addheader ("เนื้อหา-การจัดสรร", "ไฟล์แนบ; filename =" + ชื่อไฟล์); FileInputStream FIS = NULL; bufferedInputStream bis = null; ลอง {fis = new FileInputStream (ไฟล์); bis = ใหม่ bufferedInputStream (FIs); OutputStream OS = Response.GetOutputStream (); int i = bis.read (บัฟเฟอร์); ในขณะที่ (i! = -1) {os.write (บัฟเฟอร์, 0, i); i = bis.read (บัฟเฟอร์); } system.out.println ("ความสำเร็จ"); } catch (exception e) {e.printstacktrace (); } ในที่สุด {ถ้า (bis! = null) {ลอง {bis.close (); } catch (ioexception e) {e.printstacktrace (); }} ถ้า (fis! = null) {ลอง {fis.close (); } catch (ioexception e) {e.printstacktrace (); }}}}} return null;}การกำหนดค่า MultipartConfig
คุณสามารถใช้คลาสการกำหนดค่า MultipartConfig เพื่อควบคุมการอัปโหลดไฟล์ทั่วโลก
@ConfigurationPublic คลาส MultipartConfig {@Bean Public Public MultipartConfigelement MultipartConfigelement () {MultipartConfigFactory โรงงาน = ใหม่ MultipartConfigFactory (); // ตั้งค่าขีด จำกัด ขนาดไฟล์หากหน้าเกินขนาดนี้ข้อมูลข้อยกเว้นจะถูกโยนโรงงาน SetMaxFilesize ("2MB"); // kb, mb // ตั้งค่าข้อมูลทั้งหมดที่อัปโหลดขนาดโรงงานขนาดทั้งหมด SetMaxRequestSize ("20MB"); // ตั้งค่าไฟล์โฟลเดอร์ชั่วคราว // factory.setLocation ("E: // test //"); // หากไฟล์มีค่ามากกว่าค่านี้มันจะถูกเก็บไว้เป็นไฟล์ หากมีค่าน้อยกว่าค่านี้ไฟล์จะถูกเก็บไว้ในหน่วยความจำ ค่าเริ่มต้นคือ 0 // Factory.SetMaxRequestSize (0); Return Factory.CreateMultipartConfig (); -สิ่งที่ควรทราบ
รูปแบบการถ่ายโอนไฟล์ด้านหน้าและด้านหลังควรเป็นแบบหลายส่วน/ฟอร์ม-ข้อมูล
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น