高手请进 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);beginnmftp1.Host :=edit3.Text ;nmftp1.UserID :=edit1.text;nmftp1.Password :=edit2.text;nmftp1.Connect ;end; 2.“上传”代码:procedure TForm1.Button5Click(Sender: TObject);var s:string;begins:=label5.caption;nmftp1.Upload('s',null); 3.“中止”代码:procedure TForm1.Button4Click(Sender: TObject);beginNMFTP1.Abort ;end;