场景:1、系统中的附件存放在数据库表中,且占用较大空间;
2、附件格式复杂,单个文件较大;
3、所有的附件需要存储在本地,对于旧有的存储在数据库中的文件需要保 证其在“磁盘存储”下可用, 因此提供了一个将数据库中的文件迁移到磁盘中工具。
##还原前须知:
备份数据库、备份应用、准备一个足够大的磁盘空间(虚拟机部署) 本地、ftp存储或者文件服务器存储都可行
##数据库脚本查询相关附件个数及文件大小:
select count(*), sum(t.flength / 1024 / 1024) from sm_filestoreview t
##部署补丁:hotwebs、modules 确保hotwebs下没有相同的文件目录
##配置sysconfig:
将文件存储方式设置为本地存储、ftp或者文件服务器(文件服务器需测试是否可正常提交下载附件)##自定义附件存储的路径:
首先在sysconfig中将文档存储设置为本地文件存储,然后修改{nchome}/ierp/sf/documentConfig.xml 文件,修改参数root.dir.path的value值
此值修改之后就不可以再次修改 ,存储路径修改之后需要重启服务。
##重启服务
##访问 http://ip:端口/file/**/index.jsp 配置数据源,执行文件迁移
##测试:结合系统读写速度,10G平均需要30分钟左右的迁移时间,如果磁盘读写速度快,则更省时间!
##迁移完成后,需经过一段时间的运行测试,方可删掉附件数据库表中的数据;
ftp存储方式:
upload(String localfilename, String remotefilename) {
OutputStream os = null;
FileInputStream is = null;
try {
// 将远程文件加入输出流中
os = (OutputStream) ftpClient.putFileStream(remotefilename, true);
// 获取本地文件的输入流
File file_in = new File(localfilename);
is = new FileInputStream(file_in);
// 创建一个缓冲区
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
}
// 下载
download(String remoteFile, String localFile) {
InputStream is = null;
FileOutputStream os = null;
is = (InputStream) ftpClient.getFileStream(remoteFile);
File file_in = new File(localFile);
os = new FileOutputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
}
如有相关需求,可与本人联系!
企鹅:751916620

1495

被折叠的 条评论
为什么被折叠?



