線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2204
推到 Plurk!
推到 Facebook!

Delphi WebBroker Upload File

 
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2017-03-18 11:35:26 IP:183.239.xxx.xxx 未訂閱
首先,上传文件的网页代码:
<form action="../testWebBroker.exe/upload" method="post" enctype="multipart/form-data"><br /> <input type="file" id="MyUpload" name="MyUpload"><br /> <input value="submit" type="submit"><br /> </form><br />
上面的 action 里面的 "upload" 是指 WebBroker 里面的一个 Action,一个路径的名字。
然后,在 WebBroker 对应的路径底下就可以收到文件了。一开始收不到文件,是因为网页代码缺少了enctype="multipart/form-data" 这个描述。
FFileName := '文件名' Request.Files[0].FileName;
AFileName := ExtractFileName(Request.Files[0].FileName);
AFileName := ExtractFilePath(GetModuleName(0)) AFileName;
AFile := TFileStream.Create(AFileName, fmCreate);
try
Request.Files[0].Stream.Position := 0;
AFile.CopyFrom(Request.Files[0].Stream, Request.Files[0].Stream.Size); //测试保存文件,通过。
finally
AFile.Free;
end;
FFileName := HTMLEncode(FFileName);
PageProducerUpload.HTMLFile := 'FileUpload.htm'; //设计期不要指定 PageProducer 的 HTML 模板文件,而是在这里指定。如果在设计期指定,则 PageProducer 的 OnHTMLTag 事件会先于本路径事件的执行,则新页面无法显示上传的文件名。
Response.Content := PageProducerUpload.Content;

---------------------------
另:如果一个网页的 Form 里面有多个文件上传,则需要用到 WEB.ReqMulti 单元的 TMultipartContentParser。网上帮助说:
http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/ReqMulti_TMultipartContentParser.html
Web request objects use TMultipartContentParser object to parse the content of an HTTP request message from a multipart form when that request may contain uploaded files. The Web request uses this content parser to assign values for its ContentFields and Files properties.
TMultipartContentParser is only used when the current HTTP request object has a content type of 'multipart/form-data'. Multipart forms built using a WebSnap application automatically use this content type.
To allow your WebSnap application to use TMultipartContentParser in Delphi, add the ReqMulti unit to the end of your project uses clause. In C , include ReqMulti.hpp in the header of your project source file.
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2018-05-28 09:51:48 IP:59.120.xxx.xxx 未訂閱
因為 (Web.)ReqMulti 單元有預載 (RegisterContentParser) TMultipartContentParser,所以不需要額外呼叫(調用)即可正確上傳文件。
系統時間:2024-03-29 22:41:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!