请各位高手帮帮忙,关于三层架构,如何实现图片存取的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 windy317
  • 开始时间 开始时间
W

windy317

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手们,我想请教一个问题,急。。。。<br>就是为了减轻数据库服务器的压力,想利用三层结构来实现图片的上传下载,用DCOM,CORBA等中间件实现都可以,只要能实现就行啊。。。。请各位大侠帮帮忙啊
 
我们公司以前用DCOM实现图片存取的,图片存在了个目录里面不是在数据库里面。<br>&nbsp;&nbsp;IPICCOM&nbsp;=&nbsp;interface(IAppServer)<br>&nbsp;&nbsp;&nbsp;&nbsp;['{2C0AAA4A-9662-4031-B780-972B0A54C1AB}']<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;comannd(const&nbsp;strCode:&nbsp;WideString;&nbsp;const&nbsp;strCommamd:&nbsp;WideString;&nbsp;out&nbsp;nflag:&nbsp;OleVariant);&nbsp;safecall;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;savetoserver(const&nbsp;bstrFileName:&nbsp;WideString;&nbsp;aVariant:&nbsp;OleVariant;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;nFlag:&nbsp;OleVariant);&nbsp;safecall;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;getpicture(const&nbsp;bstrFileName:&nbsp;WideString;&nbsp;out&nbsp;aVanriant:&nbsp;OleVariant;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;nflag:&nbsp;OleVariant);&nbsp;safecall;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;deletepicture(const&nbsp;picfilename:&nbsp;WideString;&nbsp;out&nbsp;nflag:&nbsp;OleVariant);&nbsp;safecall;<br>&nbsp;&nbsp;end;<br><br>。。。<br><br><br>unit&nbsp;Unit1;<br><br>interface<br>uses<br>&nbsp;&nbsp;windows,Messages,classes,jpeg,dcomjepg_TLB,syncobjs,Sysutils,Variants;<br><br>type<br>&nbsp;&nbsp;TPic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;class<br>&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PicCOM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;IPicCOM;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;VariantToStream&nbsp;(const&nbsp;v&nbsp;:&nbsp;olevariant;&nbsp;Stream&nbsp;:&nbsp;TMemoryStream);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;StreamToVariant&nbsp;(Stream&nbsp;:&nbsp;TMemoryStream;&nbsp;var&nbsp;v&nbsp;:&nbsp;OleVariant);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;JPEGToVariant(aJPEG&nbsp;:&nbsp;TJPEGImage;&nbsp;var&nbsp;aVariant:OleVariant);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;VariantToJPEG(aValue&nbsp;:&nbsp;OleVariant;var&nbsp;aJPEG:TJPEGImage);<br>&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;sr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;TSearchRec;<br>&nbsp;&nbsp;&nbsp;&nbsp;strDir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;&nbsp;strname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;String;<br>&nbsp;&nbsp;&nbsp;&nbsp;rpcDir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;&nbsp;JPEGImage&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;TJPEGImage;<br><br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;remoteworkdir&nbsp;:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;&nbsp;localworkdir&nbsp;&nbsp;:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;&nbsp;picserver&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;string;<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor&nbsp;Create;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destructor&nbsp;&nbsp;Destroy;&nbsp;override;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;ConnectPicSever(serverAddr&nbsp;:&nbsp;string):&nbsp;boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;&nbsp;PicToSever(LocalPicFileName&nbsp;:&nbsp;string;RemotePicFileName&nbsp;:&nbsp;string):&nbsp;boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;&nbsp;GetPicFromServer(PicFileName&nbsp;:&nbsp;string;var&nbsp;aJPEG&nbsp;:&nbsp;TJPEGImage):&nbsp;boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;&nbsp;DelPicFromServer(PicFileName&nbsp;:&nbsp;string):&nbsp;boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;&nbsp;ExeCommand(scode&nbsp;:&nbsp;string;spara&nbsp;:&nbsp;string):&nbsp;boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;&nbsp;StartFtp&nbsp;:&nbsp;boolean&nbsp;;<br>&nbsp;&nbsp;end;<br><br>implementation<br><br>Constructor&nbsp;TPic.Create;<br>begin<br>&nbsp;&nbsp;JPEGImage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;TJPEGImage.create;<br>end;<br><br>destructor&nbsp;TPic.Destroy;<br>begin<br>&nbsp;&nbsp;JPEGImage.Free;<br>end;<br>function&nbsp;TPic.StartFtp&nbsp;:&nbsp;boolean;<br><br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strDir&nbsp;:=&nbsp;localworkdir;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strname&nbsp;:='';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;&nbsp;:=&nbsp;True;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;FindFirst&nbsp;(strDir&nbsp;+&nbsp;'/*.*',&nbsp;faAnyFile,&nbsp;sr)&nbsp;=&nbsp;0&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(true)&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(sr.Name&nbsp;&lt;&gt;&nbsp;'.')&nbsp;and&nbsp;(sr.Name&nbsp;&lt;&gt;&nbsp;'..')&nbsp;&nbsp;then&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;length(strname)&nbsp;&lt;&gt;&nbsp;0&nbsp;then&nbsp;deletefile(strname);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strname&nbsp;:=&nbsp;strDir&nbsp;+&nbsp;'/'&nbsp;+&nbsp;sr.Name;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rpcDir&nbsp;&nbsp;:=&nbsp;remoteworkdir&nbsp;+&nbsp;'/'&nbsp;+copy(sr.Name,1,8);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;PicToSever(strname,rpcDir+'/'+sr.Name)&nbsp;then&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strname&nbsp;:=&nbsp;'';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(100);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;findnext(sr)&nbsp;&lt;&gt;&nbsp;0&nbsp;then&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;length(strname)&nbsp;&lt;&gt;&nbsp;0&nbsp;then&nbsp;deletefile(strname);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br><br>function&nbsp;TPic.ConnectPicSever(serverAddr&nbsp;:&nbsp;string):&nbsp;boolean;<br>begin<br>&nbsp;Result:=&nbsp;False;<br>&nbsp;try<br>&nbsp;&nbsp;PicCOM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;CoNetComm.CreateRemote&nbsp;(serverAddr);<br>&nbsp;&nbsp;Result:=&nbsp;true;<br>&nbsp;except<br>&nbsp;end;<br>&nbsp;&nbsp;PicServer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;&nbsp;serverAddr;<br>end;<br><br>function&nbsp;&nbsp;TPic.PicToSever(LocalPicFileName&nbsp;:&nbsp;string;RemotePicFileName&nbsp;:&nbsp;string):&nbsp;boolean;<br>var<br>&nbsp;&nbsp;bFlag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;boolean;<br>&nbsp;&nbsp;aVariant&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;OleVariant;<br>&nbsp;&nbsp;JPEGImage&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;TJPEGImage;<br>&nbsp;&nbsp;aFlag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;OleVariant;<br>begin<br>&nbsp;&nbsp;&nbsp;aFlag&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;0;<br>&nbsp;&nbsp;JPEGImage&nbsp;:=&nbsp;TJPEGImage.Create&nbsp;;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;bFlag&nbsp;:=&nbsp;True;<br>&nbsp;&nbsp;&nbsp;&nbsp;JPEGImage.LoadFromFile(LocalPicFileName);<br>&nbsp;&nbsp;&nbsp;&nbsp;JPEGToVariant(JPEGImage,aVariant);<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;bFlag&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;if&nbsp;bFlag&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PicCOM.savetoserver&nbsp;(pchar(RemotePicFileName),aVariant,aFlag);<br>&nbsp;&nbsp;&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PicCOM&nbsp;:=&nbsp;CoNetComm.CreateRemote(PicServer);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bFlag&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;JPEGImage.free;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;aFlag&nbsp;=&nbsp;1&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;bFlag<br>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;Result&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;end;<br>end;<br>function&nbsp;&nbsp;TPic.GetPicFromServer(PicFileName&nbsp;:&nbsp;string;var&nbsp;aJPEG&nbsp;:&nbsp;TJPEGImage):&nbsp;boolean;<br>var<br>&nbsp;&nbsp;bFlag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;boolean;<br>&nbsp;&nbsp;aVariant&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;OleVariant;<br>&nbsp;&nbsp;aFlag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;OleVariant;<br>begin<br>&nbsp;&nbsp;&nbsp;aFlag&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;0;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;PicCOM.getpicture&nbsp;&nbsp;(pchar(PicFileName),aVariant,aFlag&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;VariantToJPEG(aVariant,aJPEG);<br>&nbsp;&nbsp;&nbsp;&nbsp;bFlag&nbsp;:=&nbsp;true;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;PicCOM&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;CoNetComm.CreateRemote(PicServer);<br>&nbsp;&nbsp;&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;bFlag&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;aFlag&nbsp;=&nbsp;1&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;bFlag<br>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;Result&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;end;<br>end;<br>function&nbsp;&nbsp;TPic.DelPicFromServer(PicFileName&nbsp;:&nbsp;string):&nbsp;boolean;<br>var<br>&nbsp;&nbsp;bFlag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;boolean;<br>&nbsp;&nbsp;aFlag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;OleVariant;<br>begin<br>&nbsp;&nbsp;&nbsp;aFlag&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;0;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;PicCOM.deletepicture&nbsp;&nbsp;(pchar(PicFileName),aFlag);<br>&nbsp;&nbsp;&nbsp;&nbsp;bFlag&nbsp;:=&nbsp;true;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;PicCOM&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;CoNetComm.CreateRemote(PicServer);<br>&nbsp;&nbsp;&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;bFlag&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;aFlag&nbsp;=&nbsp;1&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;bFlag<br>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;Result&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;end;<br>end;<br>function&nbsp;&nbsp;TPic.ExeCommand(scode&nbsp;:&nbsp;string;spara&nbsp;:&nbsp;string):&nbsp;boolean;<br>var<br>&nbsp;&nbsp;bFlag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;boolean;<br>&nbsp;&nbsp;aFlag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;OleVariant;<br>begin<br>&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;PicCOM.comannd&nbsp;(pchar(scode),pchar(spara&nbsp;),aFlag);<br>&nbsp;&nbsp;&nbsp;&nbsp;bFlag&nbsp;:=&nbsp;true;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;PicCOM&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;CoNetComm.CreateRemote(PicServer);<br>&nbsp;&nbsp;&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;bFlag&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;aFlag&nbsp;=&nbsp;1&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;bFlag<br>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;Result&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;false;<br>&nbsp;&nbsp;end;<br>end;<br>procedure&nbsp;TPic.VariantToStream&nbsp;(const&nbsp;v&nbsp;:&nbsp;olevariant;&nbsp;Stream&nbsp;:&nbsp;TMemoryStream);<br>var&nbsp;<br>&nbsp;&nbsp;p&nbsp;:&nbsp;pointer;<br>begin<br>&nbsp;&nbsp;Stream.Position&nbsp;:=&nbsp;0;<br>&nbsp;&nbsp;Stream.Size&nbsp;:=&nbsp;VarArrayHighBound&nbsp;(v,&nbsp;1)&nbsp;-&nbsp;VarArrayLowBound&nbsp;(v,&nbsp;1)&nbsp;+&nbsp;1;<br>&nbsp;&nbsp;p&nbsp;:=&nbsp;VarArrayLock&nbsp;(v);&nbsp;<br>&nbsp;&nbsp;Stream.Write&nbsp;(p^,&nbsp;Stream.Size);&nbsp;<br>&nbsp;&nbsp;VarArrayUnlock&nbsp;(v);&nbsp;<br>&nbsp;&nbsp;Stream.Position&nbsp;:=&nbsp;0;&nbsp;<br>end;&nbsp;<br><br>procedure&nbsp;TPic.StreamToVariant&nbsp;(Stream&nbsp;:&nbsp;TMemoryStream;&nbsp;var&nbsp;v&nbsp;:&nbsp;OleVariant);<br>var&nbsp;<br>&nbsp;&nbsp;p&nbsp;:&nbsp;pointer;&nbsp;<br>begin&nbsp;<br>&nbsp;&nbsp;v&nbsp;:=&nbsp;VarArrayCreate&nbsp;([0,&nbsp;Stream.Size&nbsp;-&nbsp;1],&nbsp;varByte);&nbsp;<br>&nbsp;&nbsp;p&nbsp;:=&nbsp;VarArrayLock&nbsp;(v);&nbsp;<br>&nbsp;&nbsp;Stream.Position&nbsp;:=&nbsp;0;&nbsp;<br>&nbsp;&nbsp;Stream.Read&nbsp;(p^,&nbsp;Stream.Size);&nbsp;<br>&nbsp;&nbsp;VarArrayUnlock&nbsp;(v);&nbsp;<br>end;&nbsp;<br><br>procedure&nbsp;TPic.JPEGToVariant(aJPEG&nbsp;:&nbsp;TJPEGImage;&nbsp;var&nbsp;aVariant:OleVariant);<br>var&nbsp;<br>&nbsp;&nbsp;Stream&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;TMemoryStream;&nbsp;<br>begin&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream&nbsp;:=&nbsp;TMemoryStream.Create;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aJPEG.SaveToStream(Stream);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StreamToVariant(Stream,&nbsp;aVariant);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;finally&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream.Free;&nbsp;<br>&nbsp;&nbsp;&nbsp;end;&nbsp;<br>end;&nbsp;<br><br><br>procedure&nbsp;TPic.VariantToJPEG(aValue&nbsp;:&nbsp;OleVariant;var&nbsp;aJPEG:TJPEGImage);<br>var&nbsp;<br>&nbsp;&nbsp;&nbsp;Stream&nbsp;:&nbsp;TMemoryStream;&nbsp;<br>begin<br>try<br>&nbsp;&nbsp;Stream&nbsp;:=&nbsp;TMemoryStream.Create;<br>&nbsp;&nbsp;VariantToStream&nbsp;(aValue,Stream);<br>&nbsp;&nbsp;aJPEG.LoadfromStream(Stream);<br><br>finally&nbsp;<br>&nbsp;&nbsp;&nbsp;Stream.free;<br>end;<br>end;<br><br>end.
 
路过,<br><br>刚刚给一个&nbsp;朋友写过面试用的小Demo<br><br>Webservice&nbsp;传图片!&nbsp;WebService&nbsp;服务端和客户端&nbsp;都是用D6s实现!<br><br>访问偶的博客&nbsp;huangj.com
 
你发的代码里边最关键的几个函数:<br>procedure&nbsp;VariantToStream&nbsp;(const&nbsp;v&nbsp;:&nbsp;olevariant;&nbsp;Stream&nbsp;:&nbsp;TMemoryStream);<br>procedure&nbsp;StreamToVariant&nbsp;(Stream&nbsp;:&nbsp;TMemoryStream;&nbsp;var&nbsp;v&nbsp;:&nbsp;OleVariant);<br>procedure&nbsp;JPEGToVariant(aJPEG&nbsp;:&nbsp;TJPEGImage;&nbsp;var&nbsp;aVariant:OleVariant);<br>procedure&nbsp;VariantToJPEG(aValue&nbsp;:&nbsp;OleVariant;var&nbsp;aJPEG:TJPEGImage);<br>你都已经有了,剩下的还不是你想存哪儿就存哪儿,存的时候也是一样,不知道你还想知道点什么?
 
对了,忘记说了,我用的是C++Builder,不好意思啊,不知道有没有实现的方法?
 
后退
顶部