高手请进 delphi+sql 上传下载视频 进度条 感谢kaikai_kk fghydx sz_haitao cjs5210 zzflover等等
前面发了个贴问怎么上传下载视频,在坛里多位大哥的热心教导下,小弟终于掌握了,贴部分代码。
上传下载确实很慢很慢,现在求各位帮我设计个进度条。
procedure TForm1.Button3Click(Sender: TObject); //保存视频
var
query:TADOquery;
begin
Query := TADOQuery.Create(nil);
Query.Connection:= form1.ADOConnection1;
Query.SQL.Add(Insert into mv (视频) values(:视频));
Query.Parameters.ParamByName('视频').loadfromfile(Edit4.Text,ftBlob);
try
Query.ExecSQL;
showmessage('信息写入成功')
except
showmessage('数据写入失败')
end;
end;
procedure TForm1.Button4Click(Sender: TObject); //播放视频
var
query:TADOquery;
begin
Query := TADOQuery.Create(nil);
Query.Connection := form1.ADOConnection1;
Query.SQL.Text:= 'select * from mv';
Query.Open;
TBlobField(Query.Fields[2]).SaveToFile('c:\temp.avi');
MediaPlayer1.FileName := 'c:\temp.avi';
MediaPlayer1.Open;
MediaPlayer1.Play;
Query.Free;
end;
[解决办法]
给你提供一个方法:参考TBlobField的SaveToFile源码,楼主自己可以去研究研究
它先是创建一个TStream对象,然后TStream对象调用了一个CopyFrom方法,此方法里面有一个循环是一个个Buffer读出数据的
可以根据它实现的方法思路稍微改变一下,加上进度条另外写一个方法出来,应该也可以改成边下载边播放
不过,不建议把文件存在数据库中,因为数据库大小会增长的很快,变的很庞大
最好有一个文件系统,数据库只保存路径,然后程序根据此路径用FTP/Socket方式上传下载
[解决办法]
没有必要存数据库,开个FTP就好了。
[解决办法]
就放在FTP上,读取文件就行了啊,反正是局域网,也不慢。
如果读取慢的话就加个显示,开始读。。。读取中。。。播放
[解决办法]
就放在FTP上,读取文件就行了啊,反正是局域网,也不慢。
如果读取慢的话就加个显示,开始读。。。读取中。。。播放
[解决办法]
不建议使用二进制流的方式读取视频文件,更不建议将如些之大的文件保存于sql中。。。
可以开一个ftp,用ftp或http方式进行上传、下载。。。
[解决办法]
INDY组的IDFTP
实现局域网内文件的上传和下载,包括断点续传都是可以的。
procedure TForm1.FtpDownLoad(aURL, aFile: string; bResume: Boolean);
var
tStream: TFileStream;
sName, sPass, sHost, sPort, sDir: string;
begin //ftp方式下载
if FileExists(aFile) then //建立文件流
tStream := TFileStream.Create(aFile, fmOpenWrite) else
tStream := TFileStream.Create(aFile, fmCreate);
GetFTPParams(aURL, sName, sPass, sHost, sPort, sDir);
with IdFTP1 do
try
if Connected then Disconnect; //重新连接
Username := sName;
Password := sPass;
Host := sHost;
Port := StrToInt(sPort);
Connect;
except
exit;
end;
IdFTP1.ChangeDir(sDir); //改变目录
BytesToTransfer := IdFTP1.Size(aFile);
try
if bResume then //续传
begin
tStream.Position := tStream.Size;
IdFTP1.Get(aFile, tStream, True);
end else
begin
IdFTP1.Get(aFile, tStream, False);
end;
finally
tStream.Free;
end;
end;
1.“连接”代码:
procedure TForm1.Button2Click(Sender: TObject);
begin
nmftp1.Host :=edit3.Text ;
nmftp1.UserID :=edit1.text;
nmftp1.Password :=edit2.text;
nmftp1.Connect ;
end;
2.“上传”代码:
procedure TForm1.Button5Click(Sender: TObject);
var s:string;
begin
s:=label5.caption;
nmftp1.Upload('s',null);
3.“中止”代码:
procedure TForm1.Button4Click(Sender: TObject);
begin
NMFTP1.Abort ;
end;