我写了一段例子,看看有没有用
procedure TASPImage.Send;
const ChunkSize=32768;
//32K
var
AStream: TMemoryStream;
Buffer: OleVariant;
MyBuffer: Pointer;
FSize: Cardinal;
begin
Response.Buffer:=False;
Response.ContentType:='image/jpeg';
// or 'image/gif' etc.
AStream:=TMemoryStream.Create;
try
TBlobField(CLIENTDATASET.FIELDBYNAME('IMAGE')).SaveToStream(AStream);
AStream.Seek(0, soFrombegin
ning);
FSize:=AStream.size;
Buffer:=VarArrayCreate([0, ChunkSize-1], VarByte);
while FSize >= ChunkSizedo
begin
MyBuffer:=VarArrayLock(Buffer);
AStream.ReadBuffer(MyBuffer^, ChunkSize);
VarArrayUnlock(Buffer);
Response.BinaryWrite(Buffer);
Dec(FSize,ChunkSize);
end;
if FSize > 0 then
begin
VarArrayRedim(Buffer,FSize-1);
MyBuffer:=VarArrayLock(Buffer);
AStream.ReadBuffer(MyBuffer^, FSize);
VarArrayUnlock(Buffer);
Response.BinaryWrite(Buffer);
end;
finally
AStream.Free;
end;
end;