var
  exeFilestream:Tfilestream;
with Query1 do
  try
    exeFilestream:=TFileStream.Create('D:\aaa.zip',fmopenRead);//打开文件
      insert;
      FieldStrm:=Query1.CreateBlobStream(Query1.FieldByName('filestream_ZXSJ'),bmWrite);
      GetMem(Buffer,BufSize);
      fieldbyname('orderid').AsString:=orderid;
      fieldbyname('filestream_name').AsString:=orderid;
      try
        Counter:=exeFilestream.Size;
        size_tmp:=exeFilestream.Size;
        while Counter<>0 do
        begin
          if Counter>BufSize then
            N:=BufSize
          else
            N:=Counter;
          exeFilestream.ReadBuffer(Buffer^,N);
          FieldStrm.WriteBuffer(Buffer^,N);
          Dec(Counter,N);
          Application.ProcessMessages;
        end;
      finally
        FreeMem(Buffer,BufSize);
        FieldStrm.Free;
      end;
      post;
      showmessage('上传成功!');
      finally
      exeFilestream.Free;
  end;
end;这是我上传到数据库的程序,有暂停按纽,当点了暂停之后,就停止往数据库中写,当点继续的时候,就继续传,不是重新传,是接着上次的传,请问怎么用代码实现?

解决方案 »

  1.   

    比较不容易做,如果你的文件太大,数据库就不合适了,因为对数据库来说,首先需要将已传部分读取来,保存,再将其与新接收的拼接在一起,然后再写回数据库,首先就是一个性能的问题,读写太频繁,如果是文件就不存在这个问题:文件只需要定位数据流在文件中的位置,直接写入就可以了。
      

  2.   

    只提供思路,性能方面楼上已经说!
    断点续传就是要将你上次传递的文件的位置保存起来,如果断开了
    下次再传递的时候,获得这个文件位置,然后指针移动到这个位置开始继续传输
      

  3.   

    据说大文件放数据库里是非常不妥的。