文档管理系统二次开发1

公司要求,在网上找了一个开源的网盘管理系统,并做了二次开发.非常感谢开源软件的作者提供的帮助

软件地址:

https://gitee.com/kohgylw/kiftd

在此基础上,公司要求开发如下功能

1.在上传文件时,添加一个摘要,用以描述上传的文件

 

上传文本框添加一个textarea

<h5>
	输入摘要:
</h5>
	<textarea rows="3"   style="width: 100%;" id="remark"></textarea>

js文件的上传方法里添加代码,(搜remark)

将摘要信息添加到FormData对象中,字段名为remark

fd.append("remark",$("#remark").val());

 

上传完成或者取消,失败的情况下,要清空摘要信息

$("#remark").val("");

数据库表添加字段file_remark,

文件实体类添加成员属性remark,getset方法

从请求对象里取出remark属性

在业务逻辑层(doUploadFile方法), 正常上传和同名文件更新两种情况的 文件对象赋值时,给remark属性赋值

在mybatis的xml文件中添加remark字段

 

 

 

2.下载按钮改为3个按钮

a.直接下载

b.查看下载链接

c.复制下载链接

修改较为简单

a.注释原本的下载功能

b.添加3个按钮对象,难点在于字符串拼接,多测几次就好了

 fileRow = fileRow +"<a href='" + window.location.protocol + "//" + window.location.host + "/homeController/downloadFile.do?fileId=" + fi.fileId + "'>" +
                        "<span class='glyphicon glyphicon-download'></span>直接下载</a>";

fileRow = fileRow+ "<button onclick='copyDownloadBoard("
                        + '"'
                        + window.location.protocol + "//" + window.location.host + "/homeController/downloadFile.do?fileId=" + fi.fileId
                        + '"'
                        + ")' class='btn btn-link btn-xs'><span class='glyphicon glyphicon-copyright-mark'></span> 复制链接</button>";


fileRow = fileRow+ "<button onclick='showDownloadLink("
                        + '"'
                        + window.location.protocol + "//" + window.location.host + "/homeController/downloadFile.do?fileId=" + fi.fileId
                        + '"'
                        + ")' class='btn btn-link btn-xs'><span class='glyphicon glyphicon-search'></span> 查看链接</button>";

复制链接的方法:

https://blog.csdn.net/qq_36194262/article/details/86631119

但是,IE 浏览器中不能使remove删除节点,需要参考以下方法解决

https://blog.csdn.net/myuserandwubin/article/details/45056117

 

3.以excel形式导出所有文档信息,导出的文件格式如下:

 

文件存放不是采用的类似windows的文件系统结构,而是索引的形式存放文件,所以文件路径这一列,采用了作者提供的方法获取,在每次导出excel表格时调用遍历所有文件的目录结构,动态生成文件路径,文件越多,耗时约多.

开发过程:

输出文档按钮 和js

<span id="tb" class="rightbtn"></span>
					<button class="btn btn-link rightbtn" onclick="getdocExcel()">
						输出文档EXCEL <span class="glyphicon glyphicon-download" aria-hidden="true"></span>
					</button>
//获取输出文档
function getdocExcel(){
    window.location.href="/homeController/getdocExcel.ajax";
}

后端控制层方法:

@RequestMapping({ "/getdocExcel.ajax" })
	public void getdocExcel(final HttpServletRequest request, final HttpServletResponse response) {
		System.out.println("测试");
		//获取所有文件
		List<Node> allFiles = fis.getAllFiles(request);

		String[] title = { "文件名", "下载链接", "说明", "文件路径" };
		//组装工作簿对象
		HSSFWorkbook hw = excel.getHSSFWorkbook("工作簿1", request, title, allFiles);
		//设置响应头
		Excel.setResponseHeader(response, "输出表格.xls");
		//写出文件
		OutputStream os;
		try {
			os = response.getOutputStream();
			// os=new FileOutputStream(new File("C:\\Users\\ebpm\\Desktop\\11.xlsx"));
			hw.write(os);
			os.flush();
			os.close();
			System.out.println(allFiles);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

FileServiceImpl类也就是业务逻辑层添加获取所有文件方法,调用已经写好的queryAll方法就行了

	@Override
	public List<Node> getAllFiles(HttpServletRequest request) {
		
		return fm.queryAll();

	}

mapper类的resultmap添加

<result column="file_remark" jdbcType="VARCHAR"property="fileRemark" />

 

1..16版本之后不要额外在pom.xml添加poi依赖!!!

会出现以下错误,因为1.16版本作者新增了在线预览word功能,已经有了poi依赖

https://blog.csdn.net/myid/article/details/7222256

 

util中添加一个excel类,有如下2个方法 ,输出excel对象,以及修改响应头

	public  HSSFWorkbook getHSSFWorkbook(String sheetName, HttpServletRequest request, String[] title,
			List<Node> List) {

		// 第一步,创建一个HSSFWorkbook,对应一个Excel文件
		HSSFWorkbook wb = new HSSFWorkbook();

		// 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
		HSSFSheet sheet = wb.createSheet(sheetName);

		// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
		HSSFRow row = sheet.createRow(0);

		// 第四步,创建单元格,并设置值表头 设置表头居中
		HSSFCellStyle style = wb.createCellStyle();
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式

		// 声明列对象
		HSSFCell cell = null;

		// 创建标题
		for (int i = 0; i < title.length; i++) {
			cell = row.createCell(i);
			cell.setCellValue(title[i]);
			cell.setCellStyle(style);
		}
		int i = 1;

		for (Node node : List) {
			row = sheet.createRow(i);

			row.createCell(0).setCellValue(node.getFileName());

			row.createCell(1).setCellValue("http://" + request.getServerName() // 获取服务器ipַ
					+ ":" + request.getServerPort() + "/homeController/downloadFile.do?fileId=" + node.getFileId());
			row.createCell(2).setCellValue(node.getFileRemark());
			
			
			
			
			StringBuilder sb=new StringBuilder();
			
				List<Folder> parentList = fu.getParentList(node.getFileParentFolder());
				for(Folder folder :parentList) {
					sb.append("/"+folder.getFolderName());
				}
				row.createCell(3).setCellValue(sb.toString());
			
			i++;
		}
        //自动适应列宽
		sheet.autoSizeColumn(0, true);
		sheet.autoSizeColumn(1, true);
		sheet.autoSizeColumn(2, true);
		sheet.autoSizeColumn(3, true);
		return wb;
	}

设置响应头

// 发送响应流方法
	public static void setResponseHeader(HttpServletResponse response, String fileName) {
		try {
			
			response.setCharacterEncoding("UTF-8");
			response.setContentType("application/vnd.ms-excel;charset=UTF-8");// 设置contentType为excel格式
			response.addHeader("Content-Disposition",    
				      " attachment;filename=" + new String(fileName.getBytes(),"iso-8859-1"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

FolderUtil类新建方法:

    public List<Folder> getFolderList(final String fid) {
        Folder f = this.fm.queryById(fid);
        final List<Folder> folderList = new ArrayList<Folder>();
        folderList.add(f);
        if (f != null) {
            while (!f.getFolderParent().equals("null")) {
                f = this.fm.queryById(f.getFolderParent());
                folderList.add(f);
            }
        }
        Collections.reverse(folderList);
        return folderList;
    }

 

 

业务流程:

用户点击输出文档链接

,homecontroller接受到,调用方法获取所有文件(二次开发)

调用生成excel方法组装工作簿

其中,文档路径采用遍历方式,遍历所有的文档,一个一个获取路径

 

 

 

 

 

 

 

 

开发和运维注意事项

  • 打jar包:

编译的时候先clean,再maven install 再复制静态资源resource文件夹

注意:maven 不会把resource文件夹下的静态资源(png)也复制到target文件夹,所以需要手动复制,这是必须的

再maven install

home.html默认引入的是home-min.js文件而不是home.js文件

新的版本记得复制开发项目的jar包和webcontext(静态资源),mybatisResource(mybatis映射文件),fonts文件夹(1.16版本)到正式项目路径下

  • 系统迁移:

见文档

  • 数据库:

新建的数据库记得加一个file_remark字段,varchar类型,长度255即可,可以为空

 

数据库连接时的时区问题(1.16版本后已解决)

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized

https://blog.csdn.net/qq_39098813/article/details/81138648

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值