第二种方法最简单,找到一个叫EmbeddedWB的控件,主控件中有个HTML属性,它是一个字符串列表属性,可以直接将流中的字符串复制过来就行。
没指望这个答案能被采纳(毕竟此贴都这么多年,贴主都不知道去哪了),但以后如果有人有类似的疑问搜到此贴,也能给他一个参考。
老弟,逆向过程就像下面这么简单:procedure TForm1.Button2Click(Sender: TObject)
var
FileStream1,FileStream2: TFileStream
begin
FileStream1 := TFileStream.Create('C:\workdir\B.ee', fmOpenRead)
FileStream2 := TFileStream.Create('C:\workdir\B.zip', fmCreate)
FileStream2.CopyFrom(FileStream1,FileStream1.Size)
FileStream1.Free
FileStream2.Free
end
试试,B.zip完全可以用Winrar解开,与原来的A.zip完全一致!
附件和图片都一样的。都是2进制流。读取出来的时候保存格式正确就行procedure TForm1.LoadPictureClick(Sender: TObject) // 上传图片
begin
OpenPictureDialog1.Title := '打开图片'
if OpenPictureDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName)
end
endprocedure TForm1.saveClick(Sender: TObject) //保存
var
Stream:TMemoryStream
begin
try
Stream := TMemoryStream.Create// 创建内存流
Image1.Picture.Graphic.SaveToStream(Stream) // 将图片保存到内存流中 //Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName)(另一种方法)
adoquery1.Close
adoquery1.SQL.Clear
adoQuery1.SQL.Add('Insert into test3 values (:id,:photo)')
ADOQuery1.Parameters.ParamByName('id').Value := editId.Text
adoQuery1.Parameters.ParamByName('photo').LoadFromStream(Stream,ftBlob)// 读取保存的内存图
adoquery1.ExecSQL
finally
Stream.Free// 释放内存流
end
endprocedure TForm1.ReadClick(Sender: TObject) // 读取图片
var
Stream:TMemoryStream
Jpg:TjpegImage
begin
ADOQuery1.Close
ADOQuery1.SQL.Text:='SELECT * FROM test3 where id =' + editId.Text // 查询图片
ADOQuery1.Open
if not ADOQuery1.FieldByName('photo').IsNull then
begin
Stream:=TMemoryStream.Create
Jpg:=TjpegImage.Create
TBlobField(ADOQuery1.FieldByName('photo')).SaveToStream(Stream) // 显示的转换为BlobField并保存到内存流
Stream.Position :=0
jpg.LoadFromStream(Stream) // 加载图片
image2.Picture.Assign(Jpg)
end
else
begin
image2.Picture :=nil
end Stream.FreeJpg.Freeend
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)