โปรแกรมอัพโหลดไฟล์ Java อย่างง่ายที่ไม่มีการขึ้นต่อกัน

เผยแพร่แล้ว: 2023-01-06

ข้อกำหนดพื้นฐานประการหนึ่งของเว็บแอปพลิเคชันและเว็บไซต์ร่วมสมัยคือความสามารถในการอัปโหลดไฟล์ เช่น เอกสาร ภาพถ่าย และวิดีโอ ตัวอย่างเช่น ผู้ใช้สามารถเผยแพร่วิดีโอและรูปภาพบนแพลตฟอร์มเครือข่ายสังคมเช่น Instagram

การดำเนินการและจัดการขั้นตอนการอัปโหลดไฟล์ก่อนหน้านี้เป็นงานที่ยาก โชคดีที่การอัปโหลดไฟล์ง่ายขึ้นอันเป็นผลมาจากความก้าวหน้าทางเทคโนโลยีออนไลน์ ตัวอย่างเช่น โปรแกรมอัปโหลดไฟล์ Java ทำให้การอัปโหลดไฟล์รวดเร็วและสะดวก

อย่างไรก็ตาม ด้วยการอัปโหลดไฟล์ อาชญากรไซเบอร์อาจแนะนำมัลแวร์หรือเนื้อหาที่เป็นอันตรายอื่นๆ เข้าสู่เครื่องของคุณและทำให้เซิร์ฟเวอร์เสียหาย นักพัฒนาจึงต้องแน่ใจอย่างยิ่งว่าการอัปโหลดไฟล์บนเว็บไซต์หรือเว็บแอปพลิเคชันนั้นปลอดภัย หากต้องการสร้างการอัปโหลดไฟล์ที่ปลอดภัย เราขอแนะนำให้คุณใช้ SDK การอัปโหลดไฟล์ Java ที่เชื่อถือได้

เราจะกล่าวถึงวิธีการใช้ Java เพื่อสร้างโปรแกรมอัปโหลดไฟล์ในบทความนี้

จะใช้ตัวอัปโหลดไฟล์โดยใช้ Java ได้อย่างไร

เครื่องมืออัปโหลดไฟล์ไม่มีอะไรมากไปกว่า "ส่ง" ที่ผู้ใช้สามารถคลิกเพื่ออัปโหลดไฟล์ไปยังเว็บแอปพลิเคชันหรือเว็บไซต์ อย่างไรก็ตาม เครื่องมืออัปโหลดไฟล์มีความหมายมากกว่าสำหรับนักพัฒนา

เราสามารถสร้างตัวอัปโหลดไฟล์อย่างง่ายซึ่งเราใช้เฉพาะฟอร์ม HTML และเซิร์ฟเล็ต ในตัวอย่างของเรา แบบฟอร์ม HTML จะมีช่องใส่ข้อมูลสองช่อง ช่องป้อนข้อมูลหนึ่งช่องอนุญาตให้ผู้ใช้อัปโหลดไฟล์ของตน และช่องป้อนข้อมูลที่สองช่วยให้นักพัฒนาสามารถบอกเราได้ว่าเราควรจัดเก็บไฟล์ไว้ที่ไหน

เรากำลังฟ้องวิธี POST เพื่อส่งข้อมูลแบบฟอร์มนี้รวมถึงไฟล์ไปยังเซิร์ฟเวอร์ นอกจากนี้ เมื่อเราอัปโหลดไฟล์ เราใช้การเข้ารหัส =”multipart/form-data” เนื่องจากไฟล์มีอักขระที่ไม่สามารถพิมพ์ได้จำนวนมาก

เซิร์ฟเล็ตจัดการคำขอ POST และแยกไฟล์ออกจากสตรีมหลังจากประมวลผลข้อมูลไฟล์ที่เข้ามา ปลายทางระบุตำแหน่งในระบบที่ต้องบันทึกไฟล์ เมื่อเรากดปุ่มอัปโหลด ข้อมูลจะถูกส่งไปยังเซิร์ฟเล็ต ซึ่งจะเก็บไฟล์ไว้ในตำแหน่งที่กำหนด

การสร้างไฟล์ HTML ด้วยช่องใส่ข้อมูล

ก่อนที่เราจะเริ่มต้น ให้สร้าง ไฟล์ index.html เพื่อติดตาม

index.html ควรมีรหัสต่อไปนี้ :

<!DOCTYPE html>
<html lang=”th”>
<หัว>
<title>โปรแกรมอัพโหลดไฟล์ Java</title>
<meta http-equiv=”ประเภทเนื้อหา” content=”ข้อความ/html; ชุดอักขระ=UTF-8″>
</หัว>
<เนื้อหา>
<form method=”POST” action=”upload” enctype=”multipart/form-data” >
ไฟล์:
<ประเภทอินพุต=”ไฟล์” ชื่อ=”java-file” id=”java-file” /> <br/>
ปลายทาง:
<input type=”text” value=”/java-folder” name=”destination”/>
</br>
<input type=”submit” value=”Submit” name=”submit” id=”submit” />
</แบบฟอร์ม>
</body>
</html>

เพจของคุณควรมีลักษณะดังนี้:

จัดการการประมวลผลไฟล์ฝั่งเซิร์ฟเวอร์

ในการเขียนโค้ดเซิร์ฟเล็ต เราจะสร้างไฟล์ชื่อ FileUploadServlet.java Serlets ใช้คำอธิบายประกอบเพื่อกำหนดส่วนประกอบและข้อมูลเมตา ดังนั้นคำอธิบายประกอบ @WebServlet จึงใช้เพื่อกำหนดองค์ประกอบเซิร์ฟเล็ตใน Java

คำอธิบายประกอบ Servlet ควรระบุว่า HttpServlet ใดควรดำเนินการสำหรับ URL ใด สำหรับสิ่งนั้น เรากำลังกำหนดชื่อและพารามิเตอร์ ulrPattern ในคำอธิบายประกอบ @WebServlet ของเรา โปรดทราบว่าเมื่อเราส่งแบบฟอร์ม เราจะเปลี่ยนเส้นทางไปยัง /upload url ที่ซึ่ง FileUploadServlet Class จะถูกดำเนินการ

คำอธิบายประกอบ @MultipartConfig แจ้งให้เซิร์ฟเล็ตทราบว่าจะต้องรับข้อมูลหลายส่วน/แบบฟอร์มในรูปแบบ MIME

มาเขียนโค้ดที่สมบูรณ์กันเถอะ

@WebServlet(ชื่อ = “FileUploadServlet” , urlPatterns = { “/upload” })
@MultipartConfig
FileUploadServlet คลาส สาธารณะ ขยาย HttpServlet {

ส่วนตัว Logger คงที่ สุดท้ายส่วนตัว LOGGER =
Logger.getLogger(FileUploadServlet.class.getCanonicalName());

เป็นโมฆะ ที่ ได้รับการป้องกัน processRequest (คำขอ HttpServletRequest
การตอบสนอง HttpServletResponse)
ส่ง ServletException, IOException {
response.setContentType( “ข้อความ/html;charset=UTF-8” );

สุดท้าย String dest= request.getParameter( “ปลายทาง” );
ส่วนสุดท้าย part = request.getPart( “file” );
ชื่อสตริงสุดท้าย OfFile = getFileName (ส่วน);

OutputStream out = null ;
InputStream ต่อ = null ;
สุดท้าย PrintWriter printWriter = response.getWriter();

ลอง {
out = ใหม่ FileOutputStream ( ไฟล์ ใหม่ (ปลายทาง + File.separator
+ ชื่อไฟล์));
ต่อ = part.getInputStream ();

เครื่องอ่าน int = 0 ;
ไบต์สุดท้าย [] ไบต์ = ไบต์ ใหม่ [ 1024 ];

ในขณะที่ ((reader = cont.read(bytes)) != -1 ) {
out.write(ไบต์ 0 ผู้อ่าน);
}
printWriter.println( “ไฟล์ “ + nameOfFile + ” สร้างขึ้นที่ “ + ปลายทาง);
LOGGER.log(Level.INFO, “ไฟล์{0} อัปโหลดไปยัง {1}” ,
วัตถุ ใหม่ []{nameOfFile, dest});
} จับ (FileNotFoundException fne) {
printWriter.println( “คุณไม่ได้ระบุชื่อไฟล์หรือเป็น “
+ “พยายามอัพโหลดไฟล์ไปยังไฟล์ที่ไม่มีอยู่จริง”
+ "สถานที่" );
printWriter.println( “<br/> ข้อผิดพลาด: “ + fne.getMessage());

LOGGER.log(Level.SEVERE, “เกิดข้อผิดพลาดขณะอัปโหลดไฟล์ ข้อผิดพลาด: {0}” ,
วัตถุ ใหม่ [] {fne.getMessage ()});
} ในที่สุด {
ถ้า (ออก != null ) {
out.close();
}
ถ้า (ต่อ != null ) {
ต่อ ปิด ();
}
ถ้า (printWriter != null ) {
printWriter.close();
}
}
}

สตริงส่วนตัว getFileName (ส่วนสุดท้าย) {
สุดท้าย String partHeader = part.getHeader( “การจัดการเนื้อหา” );
LOGGER.log(Level.INFO, “Part Header = {0}” , partHeader);
สำหรับ (เนื้อหาสตริง: part.getHeader( “การจัดการเนื้อหา” ).split( “;” )) {
ถ้า (content.trim().startsWith( "ชื่อไฟล์" )) {
ส่งคืน content.substring(
content.indexOf( '=' ) + 1 ).trim().replace( “\”” , “” );
}
}
ส่งคืน null ;
}
}

เมธอด processRequest เรียก เมธอด getFileName เพื่อรับชื่อไฟล์จากส่วนไฟล์หลังจากเรียกข้อมูลปลายทางและส่วนไฟล์จากคำขอ หลังจากนั้น เมธอดจะสร้าง FileOutputStream และถ่ายโอนไฟล์ไปยังตำแหน่งที่ต้องการ ส่วนการจัดการข้อผิดพลาดของเมธอดจะตรวจหาและแก้ไขสาเหตุที่พบบ่อยบางประการของข้อผิดพลาดการไม่พบไฟล์

ปรับใช้รหัส

ตอนนี้เราต้องสร้างและเรียกใช้โปรแกรมของเรา สำหรับสิ่งนั้น คุณสามารถใช้ IDE ที่คุณต้องการ เช่น NetBeans, Eclipse, Intellij Idea เป็นต้น เมื่อคุณทำเสร็จแล้ว ให้ไปที่ส่วน

https://cdn.pixabay.com/photo/2016/11/30/20/58/programming-1873854__340.png

หากคุณใช้ NetBeans ให้เปิด Netbeans IDE และไปที่ไดเร็กทอรีการทำงาน โปรดดูเอกสารอย่างเป็นทางการของ Java หากคุณมีปัญหา คลิกขวาที่โฟลเดอร์ของคุณในแท็บ Projects แล้วเลือก Deploy ต่อไปเราสามารถเข้าถึงเบราว์เซอร์และพิมพ์ URL ด้านล่าง:

http://localhost:8080/{foldername}/

หน้า HTML ที่สร้างขึ้นด้านบนจะเปิดขึ้นหลังจากที่คุณป้อน URL และกดปุ่ม Enter ในการอัพโหลดไฟล์ไปยังตำแหน่งที่ต้องการ เราสามารถค้นหาระบบและเลือกไฟล์ เราพิมพ์เส้นทางไปยังโฟลเดอร์ที่เราต้องการจัดเก็บไฟล์ในพื้นที่ปลายทาง ไดเร็กทอรีต้องเขียนได้และมีอยู่แล้วในระบบ เมื่อเราคลิกปุ่มอัปโหลดโดยที่ช่องปลายทางว่างเปล่า ข้อยกเว้นก็จะเกิดขึ้น

เซิร์ฟเล็ตได้รับคำขอ POST เมื่อเราคลิกปุ่มอัปโหลด และจะคัดลอกไฟล์ที่เลือกไปยังโฟลเดอร์ที่ระบุ

เราสามารถไปที่โฟลเดอร์ที่กำหนดและตรวจดูว่ามีไฟล์ที่โหลด (เช่น TextFile.txt) หรือไม่หลังจากคลิกปุ่มอัปโหลด

จนถึงตอนนี้ เราสร้างเครื่องมืออัปโหลดไฟล์ Java อย่างง่ายโดยใช้ HTML และ Java อย่างไรก็ตาม เนื่องจาก "แบบธรรมดา" กลายเป็นเครื่องมืออัปโหลดที่ซับซ้อนซึ่งมีคุณลักษณะมากมาย จึงอาจเป็นเรื่องยากที่จะติดตามคุณลักษณะที่สำคัญจากคุณลักษณะที่ไม่เป็นเช่นนั้น ไม่ต้องพูดถึง มีปัญหาด้านความปลอดภัยหลายประการเมื่อเราพิจารณาสร้างเครื่องมืออัปโหลดตั้งแต่เริ่มต้น ดังนั้น ส่วนถัดไปจะแนะนำวิธีการอัปโหลดไฟล์ด้วย Filestack SDK ที่ปลอดภัย

วิธีอัปโหลดไฟล์อย่างง่ายด้วย Filestack SDK

หากต้องการติดตาม คุณจะต้องใช้ คีย์ API ของ Filestack

ในการเริ่มต้น ให้ติดตั้ง Filestack SDK โดยใช้คำสั่งด้านล่าง:

การใช้งาน 'com.filestack:filestack-java:0.9.0'

หากต้องการใช้คุณสมบัติการอัปโหลดโดยใช้ Filestack ให้ใช้โค้ดต่อไปนี้ในไฟล์ Java ของคุณ:

// สร้างไคลเอนต์
การกำหนดค่า = การกำหนดค่า ใหม่ ( “API_KEY” );
ลูกค้า ลูกค้า = ลูกค้า ใหม่ (การกำหนดค่า);

// ตัวเลือกการตั้งค่าและข้อมูลเมตาที่เกี่ยวข้องกับการอัปโหลด
ตัวเลือก StorageOptions = ใหม่ StorageOptions.Builder()
.mimeType( “ข้อความ/ธรรมดา” )
.ชื่อไฟล์( “file.txt” )
.สร้าง();

// ดำเนินการอัปโหลดแบบซิงโครนัส
ไฟล์ FileLink = client.upload( “/filepath” , เท็จ );

// ทำการอัพโหลดแบบอะซิงโครนัส
Flowable<Progress<FileLink>> อัพโหลด = client.uploadAsync( “เส้นทางไฟล์” , เท็จ );
upload.doOnNext ( ผู้บริโภค ใหม่ <ความคืบหน้า <FileLink>> () {
@แทนที่
โมฆะ สาธารณะ ยอมรับ (ความคืบหน้า <FileLink> ความคืบหน้า) โยนข้อยกเว้น {
System.out.printf( “%f%% ไฟล์ของคุณถูกอัพโหลดแล้ว\n” , progress.getPercent());
ถ้า (progress.getData() != null ) {
ไฟล์ FileLink = progress.getData();
}
}
});

เพื่อให้มั่นใจว่าใช้งานได้ ให้ทำการทดสอบต่อไปนี้:

./ทดสอบไฟล์

ในกรณีที่คุณต้องการปรับใช้แอปของคุณ Bintray คือเป้าหมายของการปรับใช้ ในการปรับใช้ คุณต้องมีบัญชีผู้ใช้ที่ลงทะเบียนกับองค์กร Filestack ปฏิบัติตามแนวทางการเผยแพร่ Filestack พื้นฐานเช่นกัน จำเป็นต้องมีตัวแปรสภาพแวดล้อม “BINTRAY USER” และ “BINTRAY API KEY” วิ่ง:

ส่งออก BINTRAY_USER=
ส่งออก BINTRAY_API_KEY=
./files bintrayUpload

บทสรุป

คุณยังสามารถเลือกใช้เครื่องมือของบริษัทอื่นได้หากคุณพบว่าการบำรุงรักษาและสร้างระบบอัพโหลดไฟล์ Java ของคุณเองนั้นยาก เนื่องจากข้อกังวลด้านความปลอดภัยของข้อมูลและความเป็นส่วนตัว ผู้คนอาจหลีกเลี่ยงการใช้ระบบของบุคคลที่สาม เช่น เมื่ออัปโหลดไฟล์ที่มีบันทึกทางการแพทย์

นอกจากนี้ พวกเขายังกังวลว่าพวกเขาจะควบคุมได้เพียงเล็กน้อยว่าใครบ้างที่มีสิทธิ์เข้าถึงโครงสร้างพื้นฐานของที่เก็บไฟล์ อย่างไรก็ตาม คุณอาจรับประกันความปลอดภัยของข้อมูลแบบฟอร์มและเอกสารได้โดยใช้โซลูชันการอัปโหลดไฟล์ที่เชื่อถือได้

คำถามที่พบบ่อย (FAQs)

คุณสามารถย้ายไฟล์โดยใช้ API ได้หรือไม่

ใช่. การย้ายไฟล์โดยใช้ API สามารถทำได้โดยใช้เครื่องมือที่ใช้ API ที่มีจำหน่ายในท้องตลาด สามารถใช้ร่วมกับโปรแกรมที่ทำงานบนแพลตฟอร์มต่างๆ เช่น โปรแกรมออนไลน์ได้เช่นกัน

ฉันสามารถส่งไฟล์ขนาดใหญ่ไปยัง REST API ได้หรือไม่

การอัปโหลดไฟล์ขนาดใหญ่อาจเป็นเรื่องยาก โดยเฉพาะอย่างยิ่งเมื่อมีปัจจัยอื่นๆ เช่น แบนด์วิธต่ำและการเชื่อมต่อเครือข่าย อาจส่งผลให้การอัปโหลดล้มเหลวหลายครั้ง

Java อ่านไฟล์ที่อัพโหลดได้อย่างไร?

การใช้อินพุตสตรีม โปรแกรม Java อ่านชุดของไบต์หรืออักขระ การอ่านไฟล์เป็นการดำเนินการตามลำดับที่เริ่มต้นด้วยการสร้างวัตถุไฟล์ ส่งต่อไปยังไฟล์อินพุต อ่านข้อมูลจากสตรีม ประมวลผล แล้วปิดสตรีมและไฟล์วัตถุ

เครื่องมืออัพโหลดไฟล์คืออะไร?

เป็น API หรือปลั๊กอินที่สามารถเชื่อมต่อกับเว็บแอปพลิเคชันของคุณ และอนุญาตให้ผู้ใช้อัปโหลดรูปภาพ วิดีโอ และไฟล์ข้อความ ตลอดจนอนุญาตการแก้ไขพื้นฐาน เอฟเฟ็กต์ตัวกรอง ฯลฯ