Java Excel报表导出Demo
/**
* 一级权限数据导出
* @return
*/
@RequestMapping(value = "/getExportData", method = RequestMethod.GET)
@ResponseBody //@RequestParam("name") String name,
public void getExportData(HttpServletRequest request,HttpServletResponse response){
String filename2 = "";
Sheet sheet = null;
Sheet SecondSheet = null;
String fileName = "xxxx统计报表" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date().getTime()) + ".xlsx";
SXSSFWorkbook sxworkbook = this.createWookBook(); /**
* 权限辨别:
* 1.如果数据权限为3 仅导出中层权限报表。
* 2.其他情况直接导出等级权限一二级报表。
* 说明: 网点用户目前无报表导出功能。
*/
if("3".equals(String.valueOf(ShiroUtils.getUser().getInsLev()))){ /**
* 中层报表。
*/
SecondSheet = sxworkbook.createSheet("中层权限报表"); /**
* 表头标题行模板设定,写入数据到报表。
*/
this.setModelA(SecondSheet.createRow(0), SecondSheet.createRow(1),SecondSheet,aaaaa(serviceName).getExportDataSecond(value), this.setExcelCellStyle(sxworkbook)); }else if("2".equals(String.valueOf(ShiroUtils.getUser().getInsLev()))){ /**
* 顶层权限报表1。
*/
sheet = sxworkbook.createSheet("顶层权限报表1"); /**
* 表头标题行模板设定,写入数据到报表。
*/
this.setModelB(sheet.createRow((short)0), sheet.createRow((short)1), sheet, aaaaa(serviceName).getExportData(), this.setExcelCellStyle(sxworkbook)); /**
* 顶层权限报表2。
*/
SecondSheet = sxworkbook.createSheet("顶层权限报表2"); /**
* 表头标题行模板设定,写入数据到报表。
*/
this.setModelA(SecondSheet.createRow(0), SecondSheet.createRow(1),SecondSheet,aaaaa(serviceName).getExportDataSecond(null), this.setExcelCellStyle(sxworkbook)); } // 报表单元格合并模板。
this.setMergeCells(sheet, SecondSheet); // 窗格冻结设定
this.setFreezePanes(sheet, SecondSheet); //获取User-agent 当前是哪个浏览器
String header = request.getHeader("User-Agent");
try {
filename2 = this.encodeDownloadFilename(fileName,header);
response.setHeader("content-disposition", "filename="+filename2);
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
sxworkbook.write(response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
response.getOutputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
* 下载文件时,针对不同浏览器,进行附件名的编码
*
* @param filename
* 下载文件名
* @param agent
* 客户端浏览器
* @return 编码后的下载附件名
* @throws IOException
*/
public static String encodeDownloadFilename(String filename, String agent)
throws IOException {
// 如果是火狐浏览器
if (agent.contains("Firefox")) {
filename = "=?UTF-8?B?"
+ Base64.getEncoder().encodeToString(filename.getBytes("utf-8"))
+ "?=";
filename = filename.replaceAll("\r\n", "");
// IE及其他浏览器
} else {
filename = URLEncoder.encode(filename, "utf-8");
filename = filename.replace("+"," ");
}
return filename;
} /**
* 创建工作簿。
* @return
*/
public SXSSFWorkbook createWookBook(){
XSSFWorkbook xworkbook = new XSSFWorkbook();
SXSSFWorkbook sxworkbook = new SXSSFWorkbook(xworkbook,100);
return sxworkbook;
} /**
*
* 标题行设定,报表数据写入.
* @param rowA 标题行(第一行)。
* @param rowB 标题行(第二行)。
* @param sheet 报表页Sheet对象。
* @param data 数据集。
* @param TitleBarstyle 标题行样式对象。
* @param dataStyle 数据行样式对象。
*/
public void setModelA(Row rowA,Row rowB,Sheet sheet,List<ExportData> data,CellStyle style){ /**
* 创建标题行。
*/
Cell cellA1 = rowA.createCell(0);
Cell cellA2 = rowA.createCell(3);
Cell cellA3 = rowA.createCell(12);
Cell cellB0 = rowB.createCell(0);
Cell cellB1 = rowB.createCell(1);
Cell cellB2 = rowB.createCell(2);
Cell cellB3 = rowB.createCell(3);
Cell cellB4 = rowB.createCell(4);
Cell cellB5 = rowB.createCell(5);
Cell cellB6 = rowB.createCell(6);
Cell cellB7 = rowB.createCell(7);
Cell cellB8 = rowB.createCell(8);
Cell cellB9 = rowB.createCell(9);
Cell cellB10 = rowB.createCell(10);
Cell cellB11 = rowB.createCell(11);
Cell cellB12 = rowB.createCell(12);
Cell cellB13 = rowB.createCell(13);
Cell cellB14 = rowB.createCell(14);
Cell cellB15 = rowB.createCell(15);
Cell cellB16 = rowB.createCell(16);
Cell cellB17 = rowB.createCell(17);
Cell cellB18 = rowB.createCell(18);
Cell cellB19 = rowB.createCell(19);
Cell cellB20 = rowB.createCell(20); /**
* 标题行样式设定。
*/
cellA1.setCellStyle(style);
cellA2.setCellStyle(style);
cellA3.setCellStyle(style);
cellB0.setCellStyle(style);
cellB1.setCellStyle(style);
cellB2.setCellStyle(style);
cellB3.setCellStyle(style);
cellB4.setCellStyle(style);
cellB5.setCellStyle(style);
cellB6.setCellStyle(style);
cellB7.setCellStyle(style);
cellB8.setCellStyle(style);
cellB9.setCellStyle(style);
cellB10.setCellStyle(style);
cellB11.setCellStyle(style);
cellB12.setCellStyle(style);
cellB13.setCellStyle(style);
cellB14.setCellStyle(style);
cellB15.setCellStyle(style);
cellB16.setCellStyle(style);
cellB17.setCellStyle(style);
cellB18.setCellStyle(style);
cellB19.setCellStyle(style);
cellB20.setCellStyle(style); /**
* 设定标题行内容。
*/
cellA1.setCellValue("name");
cellA2.setCellValue("name");
cellA3.setCellValue("name");
cellB0.setCellValue("name");
cellB1.setCellValue("name");
cellB2.setCellValue("name");
cellB3.setCellValue("name");
cellB4.setCellValue("name");
cellB5.setCellValue("name");
cellB6.setCellValue("name");
cellB7.setCellValue("name");
cellB8.setCellValue("name");
cellB9.setCellValue("name");
cellB10.setCellValue("name");
cellB11.setCellValue("name");
cellB12.setCellValue("name");
cellB13.setCellValue("name");
cellB14.setCellValue("name");
cellB15.setCellValue("name");
cellB16.setCellValue("name");
cellB17.setCellValue("name");
cellB18.setCellValue("name");
cellB19.setCellValue("name");
cellB20.setCellValue("name"); // 循环数据进入报表。
if(data != null && data.size() > 0){
for (int h=0; h<data.size(); h++) { /**
* 创建数据行。
*/
Row row = sheet.createRow((short)h+2);
Cell cell0 = row.createCell(0);
Cell cell1 = row.createCell(1);
Cell cell2 = row.createCell(2);
Cell cell3 = row.createCell(3);
Cell cell4 = row.createCell(4);
Cell cell5 = row.createCell(5);
Cell cell6 = row.createCell(6);
Cell cell7 = row.createCell(7);
Cell cell8 = row.createCell(8);
Cell cell9 = row.createCell(9);
Cell cell10 = row.createCell(10);
Cell cell11 = row.createCell(11);
Cell cell12 = row.createCell(12);
Cell cell13 = row.createCell(13);
Cell cell14 = row.createCell(14);
Cell cell15 = row.createCell(15);
Cell cell16 = row.createCell(16);
Cell cell17 = row.createCell(17);
Cell cell18 = row.createCell(18);
Cell cell19 = row.createCell(19);
Cell cell20 = row.createCell(20); /**
* 数据行样式设定。
*/
cell0.setCellStyle(style);
cell1.setCellStyle(style);
cell2.setCellStyle(style);
cell3.setCellStyle(style);
cell4.setCellStyle(style);
cell5.setCellStyle(style);
cell6.setCellStyle(style);
cell7.setCellStyle(style);
cell8.setCellStyle(style);
cell9.setCellStyle(style);
cell10.setCellStyle(style);
cell11.setCellStyle(style);
cell12.setCellStyle(style);
cell13.setCellStyle(style);
cell14.setCellStyle(style);
cell15.setCellStyle(style);
cell16.setCellStyle(style);
cell17.setCellStyle(style);
cell18.setCellStyle(style);
cell19.setCellStyle(style);
cell20.setCellStyle(style); // 设定数据行内容。
cell0.setCellValue(data.get(h).getxname());
cell1.setCellValue(data.get(h).getxname());
cell2.setCellValue(data.get(h).getxname());
cell3.setCellValue(data.get(h).getxname());
cell4.setCellValue(data.get(h).getxname());
cell5.setCellValue(data.get(h).getxname());
cell6.setCellValue(data.get(h).getxname());
cell7.setCellValue(data.get(h).getxname());
cell8.setCellValue(data.get(h).getxname()+"%");
cell9.setCellValue(data.get(h).getxname()+"%");
cell10.setCellValue(data.get(h).getxname()+"%");
cell11.setCellValue(data.get(h).getxname()+"%");
cell12.setCellValue(data.get(h).getxname());
cell13.setCellValue(data.get(h).getxname());
cell14.setCellValue(data.get(h).getxname());
cell15.setCellValue(data.get(h).getxname());
cell16.setCellValue(data.get(h).getxname());
cell17.setCellValue(data.get(h).getxname()+"%");
cell18.setCellValue(data.get(h).getxname()==null?"0%":data.get(h).getxname()+"%");
cell19.setCellValue(data.get(h).getxname()+"%");
cell20.setCellValue(data.get(h).getxname()==""?"0%":data.get(h).getxname()+"%");
}
} } /**
* 标题行设定,报表数据写入.
* @param rowA 标题行(第一行)。
* @param rowB 标题行(第二行)。
* @param sheet 报表页Sheet对象。
* @param data 数据集。
*/
public void setModelB(Row rowA,Row rowB,Sheet sheet,List<ExportData> data, CellStyle style) { /**
* 标题行创建。
*/
Cell cellA1 = rowA.createCell(0);
Cell cellA2 = rowA.createCell(1);
Cell cellA3 = rowA.createCell(10);
Cell cellB1 = rowB.createCell(1);
Cell cellB2 = rowB.createCell(2);
Cell cellB3 = rowB.createCell(3);
Cell cellB4 = rowB.createCell(4);
Cell cellB5 = rowB.createCell(5);
Cell cellB6 = rowB.createCell(6);
Cell cellB7 = rowB.createCell(7);
Cell cellB8 = rowB.createCell(8);
Cell cellB9 = rowB.createCell(9);
Cell cellB10 = rowB.createCell(10);
Cell cellB11 = rowB.createCell(11);
Cell cellB12 = rowB.createCell(12);
Cell cellB13 = rowB.createCell(13);
Cell cellB14 = rowB.createCell(14);
Cell cellB15 = rowB.createCell(15);
Cell cellB16 = rowB.createCell(16);
Cell cellB17 = rowB.createCell(17);
Cell cellB18 = rowB.createCell(18); /**
* 标题行样式设定。
*/
cellA1.setCellStyle(style);
cellA2.setCellStyle(style);
cellA3.setCellStyle(style);
cellB1.setCellStyle(style);
cellB2.setCellStyle(style);
cellB3.setCellStyle(style);
cellB4.setCellStyle(style);
cellB5.setCellStyle(style);
cellB6.setCellStyle(style);
cellB7.setCellStyle(style);
cellB8.setCellStyle(style);
cellB9.setCellStyle(style);
cellB10.setCellStyle(style);
cellB11.setCellStyle(style);
cellB12.setCellStyle(style);
cellB13.setCellStyle(style);
cellB14.setCellStyle(style);
cellB15.setCellStyle(style);
cellB16.setCellStyle(style);
cellB17.setCellStyle(style);
cellB18.setCellStyle(style); // 赋值第一行标题行内容。
cellA1.setCellValue("排名");
cellA2.setCellValue("客户情况");
cellA3.setCellValue("收付汇情况"); // 赋值第二行标题行内容。
cellB1.setCellValue("客户总数");
cellB2.setCellValue("建行收支客户数");
cellB3.setCellValue("工行收支客户数");
cellB4.setCellValue("农行收支客户数");
cellB5.setCellValue("中行收支客户数");
cellB6.setCellValue("我行收支客户占比");
cellB7.setCellValue("工行收支客户占比");
cellB8.setCellValue("农行收支客户占比");
cellB9.setCellValue("中行收支客户占比");
cellB10.setCellValue("总量");
cellB11.setCellValue("建行");
cellB12.setCellValue("工行");
cellB13.setCellValue("农行");
cellB14.setCellValue("中行");
cellB15.setCellValue("我行占比");
cellB16.setCellValue("工行占比");
cellB17.setCellValue("农行占比");
cellB18.setCellValue("中行占比"); // 报表数据写入。
if(data != null && data.size() > 0){
for (int x=0; x<data.size(); x++) { // 创建数据行。
Row row = sheet.createRow((short)x+2);
Cell cell0 = row.createCell(0);
Cell cell1 = row.createCell(1);
Cell cell2 = row.createCell(2);
Cell cell3 = row.createCell(3);
Cell cell4 = row.createCell(4);
Cell cell5 = row.createCell(5);
Cell cell6 = row.createCell(6);
Cell cell7 = row.createCell(7);
Cell cell8 = row.createCell(8);
Cell cell9 = row.createCell(9);
Cell cell10 = row.createCell(10);
Cell cell11 = row.createCell(11);
Cell cell12 = row.createCell(12);
Cell cell13 = row.createCell(13);
Cell cell14 = row.createCell(14);
Cell cell15 = row.createCell(15);
Cell cell16 = row.createCell(16);
Cell cell17 = row.createCell(17);
Cell cell18 = row.createCell(18); cell0.setCellStyle(style);
cell1.setCellStyle(style);
cell2.setCellStyle(style);
cell3.setCellStyle(style);
cell4.setCellStyle(style);
cell5.setCellStyle(style);
cell6.setCellStyle(style);
cell7.setCellStyle(style);
cell8.setCellStyle(style);
cell9.setCellStyle(style);
cell10.setCellStyle(style);
cell11.setCellStyle(style);
cell12.setCellStyle(style);
cell13.setCellStyle(style);
cell14.setCellStyle(style);
cell15.setCellStyle(style);
cell16.setCellStyle(style);
cell17.setCellStyle(style);
cell18.setCellStyle(style); /**
* 数据行样式设定。
*/
cell0.setCellValue(data.get(x).getxname());
cell1.setCellValue(data.get(x).getxname());
cell2.setCellValue(data.get(x).getxname());
cell3.setCellValue(data.get(x).getxname());
cell4.setCellValue(data.get(x).getxname());
cell5.setCellValue(data.get(x).getxname());
cell6.setCellValue(data.get(x).getxname()+"%");
cell7.setCellValue(data.get(x).getxname()+"%");
cell8.setCellValue(data.get(x).getxname()+"%");
cell9.setCellValue(data.get(x).getxname()+"%");
cell10.setCellValue(data.get(x).getxname());
cell11.setCellValue(data.get(x).getxname());
cell12.setCellValue(data.get(x).getxname());
cell13.setCellValue(data.get(x).getxname());
cell14.setCellValue(data.get(x).getxname());
cell15.setCellValue(data.get(x).getxname()+"%");
cell16.setCellValue(data.get(x).getxname()==null?"0%":data.get(x).getxname()+"%");
cell17.setCellValue(data.get(x).getxname()+"%");
cell18.setCellValue(data.get(x).getxname()==""?"0%":data.get(x).getxname()+"%");
}
} } /**
* 窗格冻结模板设定
* @param sheet1 报表模板A.
* @param sheet2 报表模板B.
*/
public void setFreezePanes(Sheet sheet1 , Sheet sheet2){ // 冻结最左边两列和最上面一行。
if(sheet1 != null){
sheet1.createFreezePane(0,2);
} if(sheet2 != null){
sheet2.createFreezePane(0,2);
}
} /**
* 报表单元格合并模板。
* @param sheet1 报表模板A.
* @param sheet2 报表模板B.
* CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
*/
public void setMergeCells(Sheet sheet1 , Sheet sheet2){ if(sheet1 != null){
sheet1.addMergedRegion(new CellRangeAddress(0,1,0,0));
sheet1.addMergedRegion(new CellRangeAddress(0,0,1,9));
sheet1.addMergedRegion(new CellRangeAddress(0,0,10,18));
} if(sheet2 != null){
sheet2.addMergedRegion(new CellRangeAddress(0,0,0,2));
sheet2.addMergedRegion(new CellRangeAddress(0,0,3,11));
sheet2.addMergedRegion(new CellRangeAddress(0,0,12,20));
} } /**
* 样式设定.
* @param sxworkbook workbook工作簿对象。
* @return
*/
public CellStyle setExcelCellStyle(SXSSFWorkbook sxworkbook){ // workbook工作簿样式操作对象。
CellStyle style = sxworkbook.createCellStyle(); // 文本样式设定对象。
Font font = sxworkbook.createFont(); // 设定字体样式进入行级。
style.setFont(font); // 字体样式设定:粗体显示。
// font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 设置背景色。
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setFillForegroundColor(HSSFColor.CORNFLOWER_BLUE.index); // 设置外边框
style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 字体左右居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 字体垂直居中设定。 return style;
}
-- SQL
SELECT COUNT(*)AS TOTALCOUNT ,
COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)AS XXXCOUNT,
COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)AS XXXCOUNT,
COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)AS XXXCOUNT,
COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)AS XXXCOUNT,
CAST(COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)/ COUNT(*) AS DECIMAL(38,4))*100 AS XXXZB,
CAST(COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)/ COUNT(*) AS DECIMAL(38,4))*100 AS XXXZB,
CAST(COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)/ COUNT(*) AS DECIMAL(38,4))*100 AS XXXZB,
CAST(COUNT(CASE WHEN F.XXX>0 THEN F.XXX ELSE NULL END)/ COUNT(*) AS DECIMAL(38,4))*100 AS XXXZB,
SUM(F.TOTAL) AS TOTAL,
SUM(F.XXX) AS XXX,
SUM(F.XXX) AS XXX,
SUM(F.XXX) AS XXX,
SUM(F.XXX) AS XXX,
CASE WHEN SUM(F.TOTAL)>0 THEN CAST((SUM(F.XXX)/SUM(F.TOTAL))*100 AS DECIMAL(38,4)) END AS XXXHLZB,
CASE WHEN SUM(F.TOTAL)>0 THEN CAST((SUM(F.XXX)/SUM(F.TOTAL))*100 AS DECIMAL(38,4)) END AS XXXHLZB,
CASE WHEN SUM(F.TOTAL)>0 THEN CAST((SUM(F.XXX)/SUM(F.TOTAL))*100 AS DECIMAL(38,4)) END AS XXXHLZB,
CASE WHEN SUM(F.TOTAL)>0 THEN CAST((SUM(F.XXX)/SUM(F.TOTAL))*100 AS DECIMAL(38,4)) END AS XXXHLZB
FROM XXX F
GROUP BY F.XXX
Java Excel报表导出Demo的更多相关文章
- Java——excel导入导出demo
1. java导入 package xx; import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.userm ...
- 如何将jsp页面的table报表转换到excel报表导出
假设这就是你的jsp页面: 我们会添加一个“导出到excel”的超链接,它会把页面内容导出到excel文件中.那么这个页面会变成这个样子 在此,强调一下搜索时关键词的重要性,这样一下子可以定位到文章, ...
- JAVA Excel导入导出
--------------------------------------------方式一(新)-------------------------------------------------- ...
- Java Excel 导入导出(一)
本文主要描述通过java实现Excel导入导出 一.读写Excel三种常用方式 1.JXL——Java Excel开放源码项目:读取,创建,更新 2.POI——Apache POI ,提供API给Ja ...
- Java 复杂excel报表导出
MyExcel,是一个可直接使用Html文件,或者使用内置的Freemarker.Groovy.Beetl等模板引擎Excel构建器生成的Html文件,以Html文件中的Table作为Excel模板来 ...
- Java Excel导入导出(实战)
一.批量导入(将excel文件转成list) 1. 前台代码逻辑 1)首先在html页面加入下面的代码(可以忽略界面的样式) <label for="uploadFile" ...
- 使用 shell / python 进行sql的excel报表导出
如果要求你进行一个表数据的导出,如果使用shell的话,很容易做到,即执行一下 select 语句就可以拿到返回结果了! 如下: /usr/bin/mysql -u"${username}& ...
- excel poi导出demo
最近做了一个excel 导出的demo,是抄写老大的(嘻嘻嘻),现在把demo源码放在这里 链接:https://pan.baidu.com/s/1_xj0hej-1xwX5JF39acEOg 提取码 ...
- java Excel导入导出工具类
本文章,导入导出依赖提前定义好的模板 package com.shareworx.yjwy.utils; import java.io.File; import java.io.FileInputSt ...
随机推荐
- 百度网盘快速下载工具下载:Pandownload下载
众所周知的百度网盘下载限速很厉害,所以就有了快速下载工具出现了.一般情况下,按照家里网速有多快,使用工具下载就有多快. 可以直接复制如下图进行下载: 另外,PanDownload[百度网盘下载工具]无 ...
- linux编译qt
1.使用QtCreator新建工程,windows和linux都可以,这样才有.pro文件 2.在linux中进入工程目录,生成makefile: /home/5.9.2/gcc_64/bin/qma ...
- hackbar简单安装使用教程
安装hackbar: 在火狐的附加组件中搜索“hackbar”,将它添加到火狐浏览器中, 重启后Firefox后安装完成,按F9键打开我们就会看到在地址栏下面会出现一个大框框就是hackbar了 框框 ...
- CSS布局:sticky定位
stick定位一如其名:它随“正常”文档流而动,直到规定位置,尔后“粘”在那里:或者,当它发现自己可以跟随“正常”文档流而脱离sticky位置时,就果断离开从而加入文档流. 代码与效果如下: < ...
- cisco ap客户端无规律掉线
设备 cisco air-ct2504-50-k9 cisco air-ap1832I-H-k9 首先根据这个帖子 https://community.cisco.com/t5/other-wirel ...
- 图解分布式一致性协议Paxos
Paxos协议/算法是分布式系统中比较重要的协议,它有多重要呢? <分布式系统的事务处理>: Google Chubby的作者Mike Burrows说过这个世界上只有一种一致性算法,那就 ...
- Qt中 布局管理器失效问题
1 问题描述 在Qt5.12.0 版本中,使用 自动管理器发生,无法生效 2 问题代码 Widget::Widget(QWidget *parent) : QWidget(parent), butto ...
- Android apk逆向:反编译,回编译,签名,打包。
Android apk逆向:反编译,回编译,签名,打包流程. 第一步: apk 反编译. 1) 打开命令行窗口,输入java -version, 检测当前java版本,若版本较低, 则下载JAVA S ...
- Golang 常用的第三方包.
Goland 下面这个license server 可用 http://idea.youbbs.org (2018-01-10 04:26:09) http://45.77.127.87:81(201 ...
- CentOS7 搭建 NFS 服务器
环境: 系统版本:CentOS 7.5 一.服务端配置 1.配置环境 关闭防火墙服务 # 停止并禁用防火墙 $ systemctl stop firewalld $ systemctl disable ...