ในบทความนี้เราอธิบายวิธีการใช้ Spring Boot เพื่ออัปโหลดไฟล์ไปยังระบบไฟล์แบบกระจาย FASTDFS
โครงการนี้จะถูกสร้างขึ้นบนพื้นฐานของโครงการก่อนหน้านี้
1. การกำหนดค่าแพ็คเกจ POM
เราใช้เวอร์ชันล่าสุดของ Spring Boot 1.5.9, JDK ใช้ 1.8, tomcat8.0
<Effercess> <roupId> org.csource </groupId> <ratifactid> fastdfs-client-java </artifactid> <cersion> 1.27-snapshot </version> </dercendency>
เพิ่มแพ็คเกจ FASTDFS-CLIENT-JAVA เพื่อเรียก API ที่เกี่ยวข้องกับ FASTDFS
2. ไฟล์กำหนดค่า
เพิ่มไฟล์ fdfs_client.conf ในไดเรกทอรีทรัพยากร
connect_timeout = 60NetWork_timeOut = 60Charset = UTF-8HTTP.TRACKER_HTTP_PORT = 8080HTTP.ANTI_STEAL_TOKEN = NOHTTP.SECRET_KEY = 123456Tracker_Server = 192.168.53.85.85 192.168.53.86:22122
ไฟล์การกำหนดค่าตั้งค่าเวลาการหมดเวลาการเชื่อมต่อรูปแบบการเข้ารหัสที่อยู่ tracker_server และข้อมูลอื่น ๆ
ข้อมูลอ้างอิงสำหรับรายละเอียด: fastdfs-client-java
3. ห่อหุ้มคลาสเครื่องมืออัปโหลด FASTDFS
ห่อหุ้ม fastdfsfile และข้อมูลไฟล์พื้นฐานรวมถึงชื่อไฟล์เนื้อหาประเภทไฟล์ผู้แต่ง ฯลฯ
คลาสสาธารณะ FastDfSfile {ชื่อสตริงส่วนตัว; ไบต์ส่วนตัว [] เนื้อหา; สตริงส่วนตัว ext; สตริงส่วนตัว MD5; ผู้แต่งสตริงส่วนตัว; // ละเว้น getter และ setterห่อหุ้มคลาส FastDFSClient รวมถึงวิธีการที่ใช้กันทั่วไปเช่นการอัปโหลดดาวน์โหลดและลบ
ขั้นแรกให้อ่านข้อมูลการกำหนดค่าที่สอดคล้องกันเมื่อคลาสถูกโหลดและเริ่มต้น
Static {ลอง {String filePath = ใหม่ classPathResource ("fdfs_client.conf"). getFile (). getabsolutepath () ;; clientglobal.init (filepath); trackerClient = new TrackerClient (); trackerserver = trackerClient.getConnection (); StorageServer = trackerClient.getStorestorage (TrackerServer); } catch (exception e) {logger.error ("fastdfs ไคลเอนต์ init fail!", e); -การอัปโหลดไฟล์
สตริงคงที่สาธารณะ [] อัปโหลด (ไฟล์ fastdfsfile) {logger.info ("ชื่อไฟล์:" + file.getName () + "ความยาวไฟล์:" + file.getContent (). ความยาว); namevaluePair [] meta_list = namevaluePair ใหม่ [1]; meta_list [0] = namevaluePair ใหม่ ("ผู้แต่ง", file.getauthor ()); Long StartTime = System.currentTimeMillis (); String [] uploadResults = null; ลอง {storageclient = ใหม่ storageclient (trackerserver, Storageserver); uploadResults = storAgeclient.upload_file (file.getContent (), file.getExt (), meta_list); } catch (ioexception e) {logger.error ("ข้อยกเว้น io เมื่ออัปโหลดไฟล์:" + file.getName (), e); } catch (exception e) {logger.error ("ข้อยกเว้นที่ไม่ใช่ IO เมื่ออัปโหลดไฟล์:" + file.getName (), e); } logger.info ("upload_file เวลาที่ใช้:" + (system.currentTimeMillis () - เริ่มต้น) + "MS"); if (uploadResults == null) {logger.error ("อัปโหลดไฟล์ล้มเหลวรหัสข้อผิดพลาด:" + storageclient.getERrorCode ()); } String GroupName = uploadResults [0]; String remoteFileName = uploadResults [1]; logger.info ("อัปโหลดไฟล์สำเร็จ !!!" + "group_name:" + GroupName + ", RemoteFileName:" + "" + RemoteFileName); return updoadResults;}ใช้ client StorAgeclient ที่จัดทำโดย FASTDFS เพื่ออัปโหลดไฟล์และในที่สุดก็ส่งคืนผลการอัปโหลด
รับข้อมูลไฟล์ตามชื่อกลุ่มและชื่อไฟล์
public Static FileInfo getFile (String GroupName, String remoteFileName) {ลอง {storageclient = ใหม่ storageclient (trackerserver, StorageServer); return storageclient.get_file_info (GroupName, RemoteFileName); } catch (ioexception e) {logger.error ("ข้อยกเว้น io: รับไฟล์จาก Fast DFS ล้มเหลว", e); } catch (exception e) {logger.error ("ข้อยกเว้นที่ไม่ใช่ IO: รับไฟล์จาก Fast DFS ล้มเหลว", e); } return null;}ดาวน์โหลดไฟล์
public Static InputStream DownFile (String GroupName, String remoteFileName) {ลอง {storageclient = ใหม่ storageclient (trackerserver, StorageServer); BYTE [] fileByte = storAgeclient.download_file (GroupName, RemoteFileName); inputStream ins = new byteArrayInputStream (fileByte); return ins; } catch (ioexception e) {logger.error ("ข้อยกเว้น io: รับไฟล์จาก Fast DFS ล้มเหลว", e); } catch (exception e) {logger.error ("ข้อยกเว้นที่ไม่ใช่ IO: รับไฟล์จาก Fast DFS ล้มเหลว", e); } return null;}ลบไฟล์
โมฆะสาธารณะคงที่ deleteFile (String GroupName, String RemoteFileName) โยนข้อยกเว้น {StorAgeclient = ใหม่ StorAgeclient (TrackerServer, StoragesERVER); int i = storageclient.delete_file (GroupName, RemoteFileName); logger.info ("ลบไฟล์สำเร็จ !!!" + i);}เมื่อใช้ FASTDFS เพียงเรียกใช้วิธีการที่สอดคล้องกันของ FastDFSClient
4. คลาสการควบคุมอัปโหลดคลาสควบคุม
อ่านข้อมูลไฟล์จาก MultipartFile และอัปโหลดไฟล์ไปยังคลัสเตอร์ FastDFS โดยใช้ FastDFSClient
สตริงสาธารณะ savefile (multipartFile multipartFile) พ่น IOException {string [] fileAbsolutePath = {}; String filename = multipartFile.getoriginalfilename (); string ext = filename.substring (filename.astilastindexof (".") + 1); ไบต์ [] file_buff = null; inputStream inputStream = multipartFile.getInputStream (); if (inputStream! = null) {int len1 = inputStream.available (); file_buff = ไบต์ใหม่ [len1]; inputStream.read (file_buff); } inputStream.close (); fastdfsfile file = new fastdfsfile (ชื่อไฟล์, file_buff, ext); ลอง {fileAbsolutePath = fastdfsclient.upload (ไฟล์); // อัปโหลดไปยัง fastdfs} catch (Exception e) {logger.error ("อัปโหลดไฟล์ยกเว้นไฟล์!", e); } if (fileAbsolutePath == null) {logger.error ("อัปโหลดไฟล์ล้มเหลวโปรดอัปโหลดอีกครั้ง!"); } path String = fastDfSclient.getTrackerUrl ()+fileAbsolutePath [0]+"/"+fileAbsolutePath [1]; เส้นทางกลับ;}การควบคุมการร้องขอโทรวิธีการ SaveFile ด้านบน ()
@PostMapping ("/อัปโหลด") // คำอธิบายประกอบใหม่ตั้งแต่ 4.3Public String SingleFileUpload (@RequestParam ("ไฟล์") ไฟล์ MultipArtFile, RedirectAtTributes RedirectAtTributes) {ถ้า (file.isempty ()) return "Redirect: UploadStatus"; } ลอง {// รับไฟล์และบันทึกไว้ที่ไหนสักแห่ง String Path = saveFile (ไฟล์); Redirectattributes.addflashattribute ("ข้อความ", "คุณอัปโหลดสำเร็จแล้ว '" + file.getoriginalfilename () + "'"); Redirectattributes.addflashattribute ("Path", "ไฟล์ Path File '" + Path + "'"); } catch (exception e) {logger.error ("อัปโหลดไฟล์ล้มเหลว", e); } return "redirect:/uploadstatus";}หลังจากการอัปโหลดสำเร็จแล้วให้แสดงเส้นทางไฟล์ไปยังหน้าและการเรนเดอร์มีดังนี้:
เยี่ยมชม url นี้ในเบราว์เซอร์ของคุณและคุณจะเห็นว่ามันสามารถแสดงได้สำเร็จผ่าน FASTDFS:
สิ่งนี้ทำได้โดยใช้สปริงบูตเพื่อรวม FASTDFS เข้าด้วยกัน
รหัสตัวอย่าง - GitHub
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น