使用Java8和Spring Boot实现将docpdfppt格式的文件上传、根据页数重命名、转换为图片并保存到指定文件夹
以下是一个基本的Java8和Spring Boot实现,可以将doc/pdf/ppt格式的文件上传、根据页数重命名、转换为图片并保存到指定文件夹:
- 创建一个Spring Boot项目,并添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.15</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-tools</artifactId>
<version>2.0.15</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-excelant</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-examples</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
- 创建一个文件上传服务:
@Service
public class FileUploadService {
private final String UPLOAD_PATH = "C:/uploads"; //指定上传文件保存的路径
public String uploadFile(MultipartFile file) throws IOException {
String originalName = file.getOriginalFilename();
String fileType = originalName.substring(originalName.lastIndexOf(".") + 1); //获取文件后缀名
//根据不同的文件类型进行处理
switch (fileType.toLowerCase()) {
case "doc":
case "docx":
return uploadWordFile(file);
case "ppt":
case "pptx":
return uploadPptFile(file);
case "pdf":
return uploadPdfFile(file);
default:
throw new RuntimeException("Unsupported file format!");
}
}
private String uploadWordFile(MultipartFile file) throws IOException {
File uploadDir = new File(UPLOAD_PATH);
if (!uploadDir.exists()) {
uploadDir.mkdirs();
}
File newFile = new File(UPLOAD_PATH + "/" + UUID.randomUUID().toString() + ".png");
XWPFDocument doc = new XWPFDocument(file.getInputStream());
List<XWPFParagraph> paragraphs = doc.getParagraphs();
//计算总页数
int totalPages = 0;
for (XWPFParagraph paragraph : paragraphs) {
if (paragraph.isPageBreak()) {
totalPages++;
}
}
//将每一页转换为图片
for (int i = 0; i < totalPages; i++) {
doc.showPageBreaks(true);
BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(WordToImageUtils.transfer(doc, i)));
ImageIO.write(bufferedImage, "png", new File(UPLOAD_PATH + "/" + UUID.randomUUID().toString() + ".png"));
}
return newFile.getAbsolutePath();
}
private String uploadPptFile(MultipartFile file) throws IOException {
File uploadDir = new File(UPLOAD_PATH);
if (!uploadDir.exists()) {
uploadDir.mkdirs();
}
File newFile = new File(UPLOAD_PATH + "/" + UUID.randomUUID().toString() + ".png");
XMLSlideShow ppt = new XMLSlideShow(file.getInputStream());
List<XSLFSlide> slides = ppt.getSlides();
//计算总页数
int totalPages = slides.size();
//将每一页转换为图片
for (int i = 0; i < totalPages; i++) {
BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(SlideToImageUtils.transfer(slides.get(i))));
ImageIO.write(bufferedImage, "png", new File(UPLOAD_PATH + "/" + UUID.randomUUID().toString() + ".png"));
}
return newFile.getAbsolutePath();
}
private String uploadPdfFile(MultipartFile file) throws IOException {
File uploadDir = new File(UPLOAD_PATH);
if (!uploadDir.exists()) {
uploadDir.mkdirs();
}
File newFile = new File(UPLOAD_PATH + "/" + UUID.randomUUID().toString() + ".png");
PDDocument pdf = PDDocument.load(file.getInputStream());
PDPageTree pages = pdf.getPages();
//计算总页数
int totalPages = pages.getCount();
//将每一页转换为图片
for (int i = 0; i < totalPages; i++) {
BufferedImage bufferedImage = new PDFRenderer(pdf).renderImageWithDPI(i, 300, ImageType.RGB);
ImageIO.write(bufferedImage, "png", new File(UPLOAD_PATH + "/" + UUID.randomUUID().toString() + ".png"));
}
return newFile.getAbsolutePath();
}
}
- 创建一个文件上传控制器:
@RestController
public class FileUploadController {
@Autowired
private FileUploadService fileUploadService;
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
return fileUploadService.uploadFile(file);
}
}
- 测试上传一个doc/ppt/pdf文件并查看上传的图片是否已保存到指定文件夹中。
注意:以上代码仅供参考,具体实现方式可能因实际需求而有所不同。
原文地址: https://www.cveoy.top/t/topic/ME5 著作权归作者所有。请勿转载和采集!