前面发了个贴问怎么上传下载视频,在坛里多位大哥的热心教导下,小弟终于掌握了,贴部分代码。
上传下载确实很慢很慢,现在求各位帮我设计个进度条。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;

解决方案 »

  1.   

    给你提供一个方法:参考TBlobField的SaveToFile源码,楼主自己可以去研究研究
    它先是创建一个TStream对象,然后TStream对象调用了一个CopyFrom方法,此方法里面有一个循环是一个个Buffer读出数据的
    可以根据它实现的方法思路稍微改变一下,加上进度条另外写一个方法出来,应该也可以改成边下载边播放不过,不建议把文件存在数据库中,因为数据库大小会增长的很快,变的很庞大
    最好有一个文件系统,数据库只保存路径,然后程序根据此路径用FTP/Socket方式上传下载
      

  2.   

    没有必要存数据库,开个FTP就好了。
      

  3.   

    就放在FTP上,读取文件就行了啊,反正是局域网,也不慢。
    如果读取慢的话就加个显示,开始读读取中播放
      

  4.   

    就放在FTP上,读取文件就行了啊,反正是局域网,也不慢。
    如果读取慢的话就加个显示,开始读读取中播放
      

  5.   

    不建议使用二进制流的方式读取视频文件,更不建议将如些之大的文件保存于sql中
    可以开一个ftp,用ftp或http方式进行上传、下载
      

  6.   

    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;