文件存放读取所遇到的问题,请大家帮忙

wsxcdx 2010-03-12 05:37:28
文件为PDF格式,少则30 40页,多则400 500页,份数为20W左右
个人没有什么好的办法将文件存入数据库
现在初步决定弄一台文件服务器,在客服端指定文件,复制到服务器相应的文件夹
然后在数据库建立索引,存放文件路径
由于没有做过这方面得东西,不知道在做的过程中有没有什么难点需要注意
还有不知道大家对这类问题有没有好的解决方法
请大家多多指教,先行谢过。
...全文
171 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
somemak 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 idwb 的回复:]
如果采用共享文件夹可以采用映射网络驱动器,就相当于本地文件了
但是共享文件夹我曾经遇见过一种情况网络正常,但是不知道为什么有时候访问共享文件夹居然会超时30秒以上,这个问题我一直困扰了我很久,起先还以为程序有问题,结果是共享问题,因此后来一直放弃使用这种方式,因此我还是建议使用FTP,至少可以在网络正常情况下稳定传输,而且可以后台执行甚至断点续传
[/Quote]
估计是文件夹下的文件数量太多了,我也试过打开一个存有3万左右图片的文件夹需要4分钟左右。。。,但在程序里直接存取图片文件还是没问题的。规划好文件目录,保持单个文件目录下的文件数在1000-2000就好了
wsxcdx 2010-03-17
  • 打赏
  • 举报
回复
回sz_haitao 是复制单个文件,copyfile应该是可以的

谢谢somemak提醒,路径用ini文件保存是个不错的方法,另外共享目录读写的权限都有,应该是代码有问题

谢谢IDWB,我也知道现在的做法在很多方面都存在问题,但是时间有限,近期要交差,还有就是水平有限,
对FTP,网络传输方面一窍不通,你以前也做过这方面的东西,能否给一份DEMO学习一下?
IDWB 2010-03-16
  • 打赏
  • 举报
回复
如果采用共享文件夹可以采用映射网络驱动器,就相当于本地文件了
但是共享文件夹我曾经遇见过一种情况网络正常,但是不知道为什么有时候访问共享文件夹居然会超时30秒以上,这个问题我一直困扰了我很久,起先还以为程序有问题,结果是共享问题,因此后来一直放弃使用这种方式,因此我还是建议使用FTP,至少可以在网络正常情况下稳定传输,而且可以后台执行甚至断点续传
IDWB 2010-03-16
  • 打赏
  • 举报
回复
如果采用FTP那么什么文件服务器上的物理驱动盘没关系,你只要了解FTP指令就可以了,其他的交给FTP服务器来完成,如创建虚拟目录映射等
yshuui 2010-03-16
  • 打赏
  • 举报
回复
function File_Action(fFROM, fTO: string; Action: integer): boolean;
//对文件进行操作
var
FData: TShFileOpStruct;
begin
fillchar(FData, sizeof(TShFileOpStruct), 0);
Fdata.pFrom := PChar(fFrom + #0#0);
//设立数据源路径和文件、目录名,支(?,*通配符)
fdata.pTo := PChar(fTo + #0#0); //设立目标路径
case Action of
0: fdata.wFunc := FO_COPY; //copy
1: fdata.wFunc := FO_MOVE; //move
2: fdata.wFunc := FO_DELETE; //delete
3: fdata.wFunc := FO_RENAME; //rename
else
fdata.wFunc := FO_COPY;
end;
fData.fFlags := FOF_ALLOWUNDO; //设定操作选 项
fData.fAnyOperationsAborted := false;
fData.hNameMappings := nil;
case Action of
0: fData.lpszProgressTitle := '复制文件'; //copy
1: fData.lpszProgressTitle := '移动文件'; //move
2: fData.lpszProgressTitle := '删除文件'; //delete
3: fData.lpszProgressTitle := '重命名'; //rename
end;
result := ShFileOperation(FData) = 0;
end;
wsxcdx 2010-03-16
  • 打赏
  • 举报
回复
现在决定用文件服务器的做法来实现
但是对这部分的函数一点都不熟悉

查找文件服务器196.168.1.1 D盘目录,看数否有以当前日期(如20100316)命名的文件夹
如果有,将指定的文件复制到该文件夹
如果没有,在D盘下创建以当前日期命名的文件夹并将指定的文件复制到该文件夹

请问这一步该怎么做?请大家帮帮忙,最好能有一些代码。谢谢!
somemak 2010-03-16
  • 打赏
  • 举报
回复
没复制成功应该是你共享出来的目录不是完全共享的,只有读权限,没有写权限
haitao 2010-03-16
  • 打赏
  • 举报
回复
整个目录复制?copyfile好像不支持
直接调用一个外部命令:cmd /c copy ... ...
somemak 2010-03-16
  • 打赏
  • 举报
回复
路径可以用ini文件保存,类似:
[pdffile]
fileserver = 192.168.0.1
filepath = \temporary\grs
在代码中将ini文件的相关信息读出来赋给一个Tstring。

这样会灵活点,。如果把路径存到数据库,fileserver的地址改了,难道你要把所有的字段值都改一次?


wsxcdx 2010-03-16
  • 打赏
  • 举报
回复
能访问,能创建文件夹,就是不能复制文件
haitao 2010-03-16
  • 打赏
  • 举报
回复
注意 运行帐号 有没有访问共享目录的权限
wsxcdx 2010-03-16
  • 打赏
  • 举报
回复
颜色没标出来,就是后面打问号的地方

该怎么写才能将文件成功复制?
wsxcdx 2010-03-16
  • 打赏
  • 举报
回复

procedure TKeyinForm.BitBtn4Click(Sender: TObject);
Var
TDate,OldFile,NewFile:String;
begin
TDate:=FormatDateTime('YYYYMMDD',Now);
OldFile:='Edit1.Text'; //?
NewFile:='\\192.168.1.1\Temporary\CRS\'+TDate; //?
//红色部分这个地方该怎么写?
if not FileExists('\\192.168.1.1\Temporary\CRS\'+TDate) then
begin
CreateDirectory(PChar('\\192.168.1.1\Temporary\CRS\'+TDate),nil);
CopyFile(PChar(OldFile),PChar(NewFile),False);
end
else
CopyFile(PChar(OldFile),PChar(NewFile),False);
end;





IDWB 2010-03-15
  • 打赏
  • 举报
回复
可以采取文件服务器和数据库服务器分开的方法。
文件服务器可以采用常规的FTP,而数据库服务器可以存放ftp用户密码做权限,以及用FTP地址和Ftp文件相对路径做文件检索,这样可以分担文件服务器的存储压力
风之谷 2010-03-15
  • 打赏
  • 举报
回复
导入前压缩,导出后解压
xjjrocker 2010-03-15
  • 打赏
  • 举报
回复
两种方式:
1、传送文件到服务器保存,数据库保存数据库的存储路径
2、文件直接保存到数据库的大数据image字段。
金卯刀 2010-03-13
  • 打赏
  • 举报
回复
用SQL SERVER 2008 FileStream
bdmh 2010-03-13
  • 打赏
  • 举报
回复
主要看你的考虑方面了,如果都存入数据库的话,会导致容量骤增,可能会影响对数据库操作的效率
村委路径也是一种不错的方法,所存在的问题就是避免文件被随意删除及改变
Q315054403 2010-03-13
  • 打赏
  • 举报
回复
将文件复制到服务器资料夹,透过管理路径和文件名亦可
将文件存入SQL SERVER<2008 FileStream建议>,能更灵活控制安全性
若以每个文件10M计,预计3T空间,呵呵,仔细规划好
huangheguyun 2010-03-13
  • 打赏
  • 举报
回复
客户端先导到XML里面,然后传到服务器,再通过数据转换到数据库里面,建立索引。
DELPHI 技术大全,明日科技出的书里面有一个例子的。你可以查一下资料。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧