当前位置: 首页 > news >正文

免费做网站怎么做网站吗上海做网站比较好的

免费做网站怎么做网站吗,上海做网站比较好的,网站开发技术包括,wap网站 微信小程序好的,我来为您提供下载静态文件模板的完整代码实现。 下载静态文件模板完整实现Demo 1. 后端实现 1.1 控制器层 (DemoController.java) package com.ruoyi.business.controller;import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotat…

好的,我来为您提供下载静态文件模板的完整代码实现。

下载静态文件模板完整实现Demo

1. 后端实现

1.1 控制器层 (DemoController.java)
package com.ruoyi.business.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;/*** 静态文件模板下载Demo控制器*/
@Slf4j
@RestController
@RequestMapping("/bs/demo")
public class DemoController {/*** 下载静态Excel模板文件*/@PostMapping("/downloadTemplate")public void downloadTemplate(HttpServletResponse response) throws IOException {// 静态模板文件名String filename = "数据导入模板.xlsx";// 尝试从多个位置查找静态模板文件InputStream inputStream = null;String[] possiblePaths = {"templates/excel/" + filename,"static/templates/" + filename,"templates/" + filename,filename};for (String path : possiblePaths) {inputStream = getClass().getClassLoader().getResourceAsStream(path);if (inputStream != null) {log.info("找到静态模板文件: {}", path);break;}}if (inputStream == null) {log.error("静态模板文件 '{}' 未找到", filename);response.setStatus(HttpServletResponse.SC_NOT_FOUND);response.getWriter().write("模板文件未找到");return;}try {// 设置响应头response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));// 复制文件内容到响应流byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = inputStream.read(buffer)) != -1) {response.getOutputStream().write(buffer, 0, bytesRead);}log.info("静态模板文件下载成功: {}", filename);} catch (IOException e) {log.error("下载静态模板文件失败", e);response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);response.getWriter().write("下载失败");} finally {if (inputStream != null) {inputStream.close();}}}/*** 下载指定名称的静态模板文件*/@PostMapping("/downloadTemplate/{templateName}")public void downloadTemplateByName(@PathVariable String templateName, HttpServletResponse response) throws IOException {// 构建文件名String filename = templateName + ".xlsx";// 尝试从多个位置查找静态模板文件InputStream inputStream = null;String[] possiblePaths = {"templates/excel/" + filename,"static/templates/" + filename,"templates/" + filename,filename};for (String path : possiblePaths) {inputStream = getClass().getClassLoader().getResourceAsStream(path);if (inputStream != null) {log.info("找到静态模板文件: {}", path);break;}}if (inputStream == null) {log.error("静态模板文件 '{}' 未找到", filename);response.setStatus(HttpServletResponse.SC_NOT_FOUND);response.getWriter().write("模板文件未找到");return;}try {// 设置响应头response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));// 复制文件内容到响应流byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = inputStream.read(buffer)) != -1) {response.getOutputStream().write(buffer, 0, bytesRead);}log.info("静态模板文件下载成功: {}", filename);} catch (IOException e) {log.error("下载静态模板文件失败", e);response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);response.getWriter().write("下载失败");} finally {if (inputStream != null) {inputStream.close();}}}/*** 获取可用的模板文件列表*/@GetMapping("/templateList")public Object getTemplateList() {// 这里可以返回可用的模板文件列表// 实际项目中可以从配置文件或数据库读取return new Object[]{"数据导入模板","用户信息模板", "产品信息模板"};}
}
1.2 配置文件 (application.yml)
# 静态文件配置
spring:web:resources:static-locations: classpath:/static/,classpath:/templates/cache:period: 3600

2. 前端实现

2.1 API接口 (demo.js)
import request from '@/utils/request'// 下载静态模板文件
export function downloadTemplate() {return request({url: '/bs/demo/downloadTemplate',method: 'post',responseType: 'blob'})
}// 下载指定名称的模板文件
export function downloadTemplateByName(templateName) {return request({url: `/bs/demo/downloadTemplate/${templateName}`,method: 'post',responseType: 'blob'})
}// 获取可用的模板文件列表
export function getTemplateList() {return request({url: '/bs/demo/templateList',method: 'get'})
}
2.2 页面组件 (demo/index.vue)
<template><div class="app-container"><!-- 操作按钮区域 --><el-row :gutter="10" class="mb8"><el-col :span="1.5"><el-buttontype="primary"icon="el-icon-download"size="mini"@click="handleDownloadTemplate">下载模板</el-button></el-col><el-col :span="1.5"><el-dropdown @command="handleDownloadTemplateByName" split-button type="success" size="mini">下载指定模板<el-dropdown-menu slot="dropdown"><el-dropdown-item v-for="template in templateList" :key="template" :command="template">{{ template }}</el-dropdown-item></el-dropdown-menu></el-dropdown></el-col><el-col :span="1.5"><el-buttontype="info"icon="el-icon-refresh"size="mini"@click="loadTemplateList">刷新模板列表</el-button></el-col></el-row><!-- 模板文件信息展示 --><el-card class="box-card" v-if="templateList.length > 0"><div slot="header" class="clearfix"><span>可用模板文件</span></div><el-table :data="templateList" style="width: 100%"><el-table-column prop="templateName" label="模板名称" width="200"><template slot-scope="scope">{{ scope.row }}</template></el-table-column><el-table-column label="操作" width="150"><template slot-scope="scope"><el-buttonsize="mini"type="text"icon="el-icon-download"@click="handleDownloadTemplateByName(scope.row)">下载</el-button></template></el-table-column></el-table></el-card><!-- 下载进度提示 --><el-dialogtitle="下载提示":visible.sync="downloadDialogVisible"width="400px":close-on-click-modal="false"><div style="text-align: center;"><i class="el-icon-loading" v-if="downloading"></i><i class="el-icon-success" v-else-if="downloadSuccess"></i><i class="el-icon-error" v-else-if="downloadError"></i><p>{{ downloadMessage }}</p></div><div slot="footer" class="dialog-footer"><el-button @click="downloadDialogVisible = false" v-if="!downloading">确 定</el-button></div></el-dialog></div>
</template><script>
import { downloadTemplate,downloadTemplateByName,getTemplateList
} from "@/api/bs/demo";export default {name: "Demo",data() {return {templateList: [],downloadDialogVisible: false,downloading: false,downloadSuccess: false,downloadError: false,downloadMessage: ''};},created() {this.loadTemplateList();},methods: {/** 加载模板文件列表 */loadTemplateList() {getTemplateList().then(response => {this.templateList = response.data || response;}).catch(error => {console.error('加载模板列表失败:', error);this.$message.error('加载模板列表失败');});},/** 下载默认模板 */handleDownloadTemplate() {this.downloadDialogVisible = true;this.downloading = true;this.downloadSuccess = false;this.downloadError = false;this.downloadMessage = '正在下载模板文件...';downloadTemplate().then(response => {this.downloadFile(response, '数据导入模板.xlsx');this.downloading = false;this.downloadSuccess = true;this.downloadMessage = '模板文件下载成功!';}).catch(error => {console.error('下载模板失败:', error);this.downloading = false;this.downloadError = true;this.downloadMessage = '模板文件下载失败,请重试';});},/** 下载指定名称的模板 */handleDownloadTemplateByName(templateName) {this.downloadDialogVisible = true;this.downloading = true;this.downloadSuccess = false;this.downloadError = false;this.downloadMessage = `正在下载 ${templateName} 模板文件...`;downloadTemplateByName(templateName).then(response => {this.downloadFile(response, `${templateName}.xlsx`);this.downloading = false;this.downloadSuccess = true;this.downloadMessage = `${templateName} 模板文件下载成功!`;}).catch(error => {console.error('下载模板失败:', error);this.downloading = false;this.downloadError = true;this.downloadMessage = `${templateName} 模板文件下载失败,请重试`;});},/** 处理文件下载 */downloadFile(response, filename) {try {// 创建Blob对象const blob = new Blob([response], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});// 创建下载链接const url = window.URL.createObjectURL(blob);const link = document.createElement('a');link.href = url;link.download = filename;// 触发下载document.body.appendChild(link);link.click();document.body.removeChild(link);// 释放URL对象window.URL.revokeObjectURL(url);} catch (error) {console.error('文件下载处理失败:', error);this.downloading = false;this.downloadError = true;this.downloadMessage = '文件下载处理失败';}}}
};
</script><style scoped>
.box-card {margin-top: 20px;
}.clearfix:before,
.clearfix:after {display: table;content: "";
}.clearfix:after {clear: both;
}
</style>

3. 静态文件配置

3.1 文件目录结构
src/main/resources/
├── templates/
│   └── excel/
│       ├── 数据导入模板.xlsx
│       ├── 用户信息模板.xlsx
│       └── 产品信息模板.xlsx
└── static/└── templates/├── 数据导入模板.xlsx├── 用户信息模板.xlsx└── 产品信息模板.xlsx
3.2 模板文件格式示例

Excel文件应包含以下列:

  • 第1列: 编码(必填)
  • 第2列: 名称(必填)
  • 第3列: 类型(可选)
  • 第4列: 状态(可选)
  • 第5列: 备注(可选)

4. 核心功能特点

  1. 静态文件下载:直接从classpath加载静态Excel文件
  2. 多路径查找:支持多个目录查找模板文件
  3. 错误处理:完善的错误处理和用户提示
  4. 进度提示:下载过程中的用户友好提示
  5. 模板列表:动态获取可用模板文件列表
  6. 灵活下载:支持下载默认模板和指定名称模板

这个实现专注于静态文件模板的下载功能,提供了完整的前后端代码,可以直接用于其他项目。

http://www.dtcms.com/a/573913.html

相关文章:

  • 【观察者模式】深入 Spring 事件驱动模型:从入门到微服务整合实战
  • 大连永锐网站哪家做的推荐常州网站建设
  • React的设计理念与核心特性
  • 单片机中NRST引脚复用为GPIO
  • React 13
  • 【功能安全】AEB功能HARA分析
  • 佛山做外贸网站特色中企动力做过的网站
  • 重庆网站建设冒号做网站优化给业务员提成
  • 影刀RPA完全指南:从零入门到自动化高手(2/10)
  • 学习笔记:Jquery getJSON方法分析(一)
  • Linux--进程池
  • 洞头区网站建设收费网站模板制作步骤
  • wordpress直接自己网站怎么做优化
  • 【开题答辩全过程】以 分布式菌菇销售系统为例,包含答辩的问题和答案
  • ui设计网站建设是什么意思深圳做网站制作
  • Canal:让 MySQL 数据同步像呼吸一样自然
  • PE工具开发实战:非正向与安全解析
  • 进一步加强网站建设管理郑州app拉新项目
  • 徐州百度推广总代理台州专业关键词优化
  • C++ 中模板元编程与 SFINAE 机制
  • 【实用运维工具】一键完成Oracle数据库的健康巡检,生成WORD报告
  • ICLR 2025 Spotlight | 打破AI“黑箱”!最新IIS评分框架:揭示模型性能与可解释性的共生关系
  • Java实现国密算法 SM2 /SM3 /SM4(基于 BouncyCastle)
  • 文件网站建设高新公司网站建设哪家好
  • Zabbix企业级分布式监控系统(上)
  • 深度解析:接口性能优化实战指南
  • 站点创建成功html代码hr表示
  • 一、Netty-高并发IO底层原理(5种主要的IO模型)
  • 网站开发外包 验收c2c有哪些网站
  • Jenkins是什么