首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi+sql 下传上载视频 进度条 感谢kaikai_kk fghydx sz_haitao cjs5210 zzflover等等

2012-08-28 
高手请进 delphi+sql 上传下载视频 进度条 感谢kaikai_kk fghydx sz_haitao cjs5210 zzflover等等前面发了

高手请进 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
实现局域网内文件的上传和下载,包括断点续传都是可以的。
  

Delphi(Pascal) code
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; 

热点排行