ดาวน์โหลดไฟล์จาก URL ด้วย Java
Aspose.HTML for Java
ให้บริการเครือข่ายผ่านบริบทของ HTMLDocument สร้าง Url ส่ง RequestMessage ด้วย document.getContext().getNetwork() ตรวจสอบ ResponseMessage และเขียนข้อมูลไบต์ที่ได้รับลงในเส้นทางภายในเครื่อง
วิธีนี้เหมาะเมื่อแอปพลิเคชัน Java โหลดหรือประมวลผล HTML อยู่แล้ว และต้องดาวน์โหลดทรัพยากรที่พบในเอกสาร เช่น รูปภาพ สไตล์ชีต ไฟล์บีบอัด หรือไฟล์ที่เชื่อมโยง นอกจากนี้ยังสามารถใช้บริบทเครือข่ายเดียวกันกับ URL ของทรัพยากรโดยตรงโดยไม่ต้องโหลดหน้าเว็บก่อน
บันทึกไฟล์ที่ดาวน์โหลดด้วย Java
ตัวอย่าง Java ต่อไปนี้ดาวน์โหลดไฟล์ PNG จาก URL ที่ระบุและบันทึกไว้ในไดเรกทอรี output โดยใช้คลาสมาตรฐาน java.nio.file สำหรับการทำงานกับไฟล์ภายในเครื่อง จึงไม่ต้องพึ่งคลาสตัวช่วยเฉพาะของตัวอย่าง
ดาวน์โหลดไฟล์จาก URL ด้วย Java
Path outputDirectory = Paths.get("output");
Files.createDirectories(outputDirectory);
Url fileUrl = new Url("https://docs.aspose.com/html/images/handlers/message-handlers.png");
try (HTMLDocument document = new HTMLDocument()) {
// Send a request through the document network service
RequestMessage request = new RequestMessage(fileUrl);
ResponseMessage response = document.getContext().getNetwork().send(request);
if (!response.isSuccess()) {
throw new IllegalStateException("The file could not be downloaded");
}
// Derive the local file name from the URL path
String fileName = Paths.get(fileUrl.getPathname())
.getFileName()
.toString();
Path outputPath = outputDirectory.resolve(fileName);
// Save the response body to the local file system
Files.write(outputPath, response.getContent().readAsByteArray());
System.out.println("Saved to " + outputPath);
}
ขั้นตอนการดาวน์โหลดไฟล์จาก URL
- สร้าง
HTMLDocumentว่างเพื่อเข้าถึงบริบทเครือข่าย - สร้าง
Urlสำหรับทรัพยากรระยะไกล - ส่ง URL ให้
RequestMessageแล้วส่งคำขอผ่านบริการเครือข่ายของเอกสาร - ตรวจสอบ
ResponseMessage.isSuccess()ก่อนอ่านเนื้อหาการตอบกลับ - สร้างชื่อไฟล์จากเส้นทาง URL และบันทึกข้อมูลไบต์ที่ได้รับด้วย
Files.write()
หลังจากเรียกใช้โค้ด ทรัพยากรที่ดาวน์โหลดจะอยู่ที่ output/message-handlers.png
ควรใช้ API เครือข่ายของ Aspose.HTML เมื่อใด
ใช้วิธีนี้เมื่อการดาวน์โหลดไฟล์เป็นส่วนหนึ่งของการประมวลผล HTML ตัวอย่างเช่น แอปพลิเคชันอาจค้นหา URL ของรูปภาพจากแอตทริบิวต์ src ก่อน แปลงการอ้างอิงสัมพัทธ์เป็น URL แบบสัมบูรณ์โดยใช้ URI ฐานของเอกสาร แล้วจึงส่งคำขอทรัพยากรผ่านบริบทของเอกสารเดียวกัน
สำหรับการดาวน์โหลด HTTP แบบอิสระที่ไม่เกี่ยวข้องกับการวิเคราะห์ HTML หรือทรัพยากรของเอกสาร ให้ใช้ไคลเอนต์ HTTP ที่แอปพลิเคชัน Java ใช้อยู่แล้ว เวิร์กโฟลว์ของ Aspose.HTML เหมาะอย่างยิ่งเมื่อการนำทาง DOM การแปลง URL สัมพัทธ์ การดึงทรัพยากร และการดาวน์โหลดเป็นส่วนหนึ่งของการทำงานเดียวกัน
อ่าน Save File from URL Using Aspose.HTML for Java เพื่อดูตัวอย่างที่เกี่ยวข้องในเอกสารประกอบ
ข้อควรระวังเมื่อดาวน์โหลดไฟล์
- ตรวจสอบการตอบกลับก่อนบันทึก URL อาจส่งคืนหน้าแสดงข้อผิดพลาด การเปลี่ยนเส้นทาง หรือทรัพยากรที่ไม่พร้อมใช้งานแทนไฟล์ที่คาดไว้
- เลือกชื่อไฟล์ภายในเครื่องอย่างรอบคอบ ตัวอย่างใช้ส่วนสุดท้ายของเส้นทาง URL กำหนดชื่ออย่างชัดเจนเมื่อเส้นทางว่าง หรือเมื่อเซิร์ฟเวอร์ระบุชื่ออื่นในส่วนหัวการตอบกลับ
- ป้องกันการเขียนทับโดยไม่ตั้งใจ URL ต่างกันอาจลงท้ายด้วยชื่อไฟล์เดียวกัน จึงควรสร้างชื่อที่ไม่ซ้ำกันเมื่อดาวน์โหลดทรัพยากรหลายรายการ
- เตรียมพร้อมสำหรับไฟล์ขนาดใหญ่
readAsByteArray()เก็บการตอบกลับทั้งหมดไว้ในหน่วยความจำ ใช้การดาวน์โหลดแบบสตรีมเมื่อทรัพยากรมีขนาดใหญ่เกินกว่าจะเก็บไว้ในหน่วยความจำได้อย่างปลอดภัย - ตรวจสอบ URL ที่ไม่น่าเชื่อถือ จำกัดรูปแบบและโฮสต์ที่อนุญาตเมื่อ URL มาจากผู้ใช้หรือเอกสารภายนอก และเขียนไฟล์เฉพาะในไดเรกทอรีผลลัพธ์ที่อนุมัติแล้ว
- เคารพลิขสิทธิ์และข้อกำหนดของเว็บไซต์ ดาวน์โหลดและนำกลับมาใช้เฉพาะไฟล์ที่เป็นของคุณหรือที่คุณได้รับอนุญาตเท่านั้น URL ที่เข้าถึงได้แบบสาธารณะไม่ได้ให้สิทธิ์ในการคัดลอก เผยแพร่ต่อ หรือใช้ไฟล์ในเชิงพาณิชย์โดยอัตโนมัติ
คำถามที่พบบ่อย
1. เหตุใดตัวอย่างจึงสร้าง HTMLDocument ว่าง?
ออบเจ็กต์ HTMLDocument ให้บริบทการเรียกดูที่เปิดให้ใช้บริการเครือข่ายของ Aspose.HTML เอกสารสามารถว่างได้เมื่อแอปพลิเคชันทราบ URL ของทรัพยากรอยู่แล้วและไม่จำเป็นต้องวิเคราะห์หน้าเว็บก่อน
2. Java API สามารถดาวน์โหลดไฟล์ประเภทอื่นนอกจากรูปภาพได้หรือไม่?
ได้ บริการเครือข่ายส่งคืนเนื้อหาการตอบกลับเป็นข้อมูลไบต์ กระบวนการเดียวกันจึงสามารถบันทึกเอกสาร ไฟล์บีบอัด สไตล์ชีต รูปภาพ และทรัพยากรอื่นที่เข้าถึงได้ผ่าน URL ที่รองรับ แอปพลิเคชันยังคงต้องตรวจสอบการตอบกลับและเลือกชื่อกับนามสกุลไฟล์ที่ถูกต้อง
3. สามารถดาวน์โหลดไฟล์ที่อ้างอิงด้วย URL สัมพัทธ์ใน HTML ได้หรือไม่?
ได้ อ่านเส้นทางทรัพยากรจากแอตทริบิวต์ เช่น src หรือ href แล้วแก้ไขโดยใช้ document.getBaseURI() ด้วย new Url(relativePath, document.getBaseURI()) ก่อนสร้างคำขอ
4. จะดาวน์โหลดไฟล์หลายรายการที่พบในเอกสาร HTML ด้วย Java ได้อย่างไร?
รวบรวม URL ของทรัพยากรที่ต้องการจาก DOM แปลงการอ้างอิงสัมพัทธ์แต่ละรายการเป็น URL แบบสัมบูรณ์ และส่ง RequestMessage แยกกันสำหรับแต่ละ URL ผ่านบริการเครือข่ายของเอกสารเดียวกัน กำหนดชื่อไฟล์ผลลัพธ์ที่ไม่ซ้ำกันเมื่อ URL ต่างกันลงท้ายด้วยชื่อไฟล์เดียวกัน
ติดตั้ง Aspose.HTML for Java
เพิ่ม Aspose.HTML for Java จากที่เก็บอย่างเป็นทางการของ Aspose แทนที่ ASPOSE_HTML_VERSION ด้วยหมายเลขเวอร์ชันที่ตรงกันจากหน้า
รุ่นของ Aspose.HTML for Java
จากนั้นโหลดหรือสร้างโครงการใหม่เพื่อให้ระบบแก้ไขการขึ้นต่อกันได้
เพิ่มที่เก็บและการขึ้นต่อกันในโครงการ Maven:
Maven – pom.xml
<repositories>
<repository>
<id>AsposeJavaAPI</id>
<url>https://releases.aspose.com/java/repo/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-html</artifactId>
<version>ASPOSE_HTML_VERSION</version>
</dependency>
</dependencies>เพิ่มที่เก็บและการขึ้นต่อกันในโครงการ Gradle:
Gradle – build.gradle
repositories {
maven {
url = uri('https://releases.aspose.com/java/repo/')
}
}
dependencies {
implementation 'com.aspose:aspose-html:ASPOSE_HTML_VERSION'
}ใช้ JDK ที่เข้ากันได้กับรุ่นที่เลือก สำหรับการติดตั้ง JAR ด้วยตนเอง Kotlin DSL การอัปเดต และการแก้ไขปัญหาการขึ้นต่อกัน โปรดดู ติดตั้ง Aspose.HTML for Java
งานดึงข้อมูลที่เกี่ยวข้องใน Java
ศึกษาการดึงข้อมูล HTML การดาวน์โหลดรูปภาพ การดึง SVG หรือภาพรวม Aspose.HTML for Java ต่อไป