下面是Spring Boot导出文件、前端下载文件的攻略。
问题
有时候我们需要从Spring Boot应用中导出一些文件,如Excel、PDF或者其他格式的文件。我们如何通过前端将这些文件下载到本地?
导出文件
在Spring Boot中,我们可以借助一些开源组件实现文件的导出,常见的包括Apache POI、iText等。这里以Apache POI导出Excel文件为例。
首先,我们需要添加Maven依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
接着,我们可以创建一个Excel生成工具类,如下所示:
@Component
public class ExcelUtil {
public static void createExcel(HttpServletResponse response) throws IOException {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet");
// 在第0行创建标题行
Row titleRow = sheet.createRow(0);
titleRow.createCell(0).setCellValue("标题1");
titleRow.createCell(1).setCellValue("标题2");
titleRow.createCell(2).setCellValue("标题3");
// 向后添加三行数据
for (int i = 1; i <= 3; i++) {
Row row = sheet.createRow(i);
row.createCell(0).setCellValue("数据1-" + i);
row.createCell(1).setCellValue("数据2-" + i);
row.createCell(2).setCellValue("数据3-" + i);
}
// 将文件输出到客户端
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=test.xlsx");
workbook.write(response.getOutputStream());
workbook.close();
}
}
在上面的代码中,我们先创建一个Workbook实例,并创建一个Sheet对象。接着,在第0行创建标题列,然后向后添加三行数据。最后,我们设置响应头,将Excel文件输出到客户端。
前端下载文件
在前端,我们可以使用Ajax的方式发送请求,并借助浏览器提供的下载API实现文件的下载。下面是一个jQuery的示例:
$("#download").click(function() {
$.ajax({
url: "/excel",
type: "GET",
xhrFields: {
responseType: 'blob'
},
success: function(data) {
var a = document.createElement('a');
var url = window.URL.createObjectURL(data);
a.href = url;
a.download = "test.xlsx";
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
}
});
});
在上述代码中,我们通过Ajax请求获取Excel文件的二进制数据,使用Blob创建一个URL,通过a标签模拟点击下载按钮。在下载完成后,我们还需要释放URL以释放内存。
另外,如果需要实现跨域下载,我们可以在Spring Boot中添加CORS配置,如下所示:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "DELETE", "PUT")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}
示例代码
为了方便,我将上面的代码封装成了一个Spring Boot项目,并上传到了GitHub,你可以参考这个示例:springboot-download-demo
除了Excel文件的导出,该示例中还包括了PDF文件的导出和图片文件的下载。你可以通过访问不同的URL来测试这些功能。
希望这份攻略对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot导出文件,前端下载文件方式 - Python技术站