关于开发ASP对象返回图象(100分)

  • 主题发起人 主题发起人 蛮牛野蛮牛
  • 开始时间 开始时间

蛮牛野蛮牛

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi开发ASP对象时,想用response.binaraywrite(aoleVariant)输出一个图象;
我用CLIENTDATASET.FIELDBYNAME('IMAGE').AsVariant获得Variant后,用varcopy(aoleVariant,...)转换后输出,确是一堆乱码;
而改用asp 叫ado却能得到正确的图象。
 
$)

取出图片这中方法可以,上传图片怎么办?我在做这种程序,
请指教!
 
我想知道怎么怎么分析数据等到图片然后输出到WEB
 
其实分析和一般的ASP分析的方法一样,通过查找特定的串然后通过COPY将数据取出。
如果需要我可以将程序发给你。我的MAIL manniuyemanniu@sina.com
 
我想知道关于Delphi做Asp对象的东东,能不能将你的代码发给我看看呢,如果不需要保密的
话,我想参月学习,谢谢
 
我写了一段例子,看看有没有用
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;
 
为什么每次传送32K,不管大小一次传完是不是也可以?一次传送多于32K是否可以?
 
当然可以,因为这段是从我的一段代码中取出来的,原来我的代码是传送
一个文件(不一定是图像),文件很大的时候占用内存太大,所以要分段
传输,上面的代码只是将从文件读数据改成了从TMemoryStream里读数据。
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部