久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

delphi中通過(guò)http控件上載文件的問(wèn)題(緊急)

 老魏的書(shū)架 2012-01-11

delphi中通過(guò)http控件上載文件的問(wèn)題(緊急)[問(wèn)題點(diǎn)數(shù):100,,結(jié)帖人:linuxchen]

  • linuxchen
  • (chen)
  • 等 級(jí):
  • 結(jié)帖率:
樓主發(fā)表于:2003-06-03 15:16:32

http控件能不能實(shí)現(xiàn)post文件,?
要求效果就像普通的html中通過(guò)表單(form中 <INPUT   TYPE= "FILE "   NAME= "FILE1 "   SIZE= "50 "> ))發(fā)送文件一樣.

我試過(guò)用post字符串好像沒(méi)問(wèn)題。,。但是要實(shí)現(xiàn)這種方式?jīng)]頭緒
回復(fù)次數(shù):14
  • whitetiger8用戶頭像
  • whitetiger8
  • (鍵盤(pán)未敲壞,,基本功未練成)
  • 等 級(jí):
#1樓 得分:0回復(fù)于:2003-06-03 15:23:28
關(guān)注。,。
#2樓 得分:0回復(fù)于:2003-06-03 15:47:35
換一種說(shuō)法就是用delphi的http控件提交包含文件的表單,。,。服務(wù)器端用普通的文件上載控件
像接受html頁(yè)面中的form提交一樣來(lái)接受上載的文件。
#3樓 得分:100回復(fù)于:2003-06-03 16:33:51
http://www./scripts/website.dll/Tutorials?DelphiTCPIP&IndyMultiPartFormData&5

gz!!!
把上面的研究一下,hehe.
#4樓 得分:0回復(fù)于:2003-06-04 11:52:20
非常感謝yk1028
已經(jīng)解決,。。等會(huì)有時(shí)間總結(jié)一下
#5樓 得分:0回復(fù)于:2003-06-04 12:14:20
也是昨天偶然查到的.
俺還沒(méi)擺平   :(  
這是delphi7環(huán)境
總結(jié)了帖出來(lái)吧,我搜索一下很多人要這方面的
  • nydelphi用戶頭像
  • nydelphi
  • (程序狂人)
  • 等 級(jí):
#6樓 得分:0回復(fù)于:2003-06-04 12:34:00
D
#7樓 得分:0回復(fù)于:2003-06-12 13:27:16
對(duì)不起,很長(zhǎng)時(shí)間沒(méi)回貼也沒(méi)結(jié)貼
其實(shí)很簡(jiǎn)單:
就是利用idhttp.post
post方法有三個(gè)參數(shù)
1,。調(diào)用的腳本
2,。post的stream
3。接收返回信息的stream
問(wèn)題的關(guān)鍵就是構(gòu)造符合規(guī)范的stream格式(要跟從網(wǎng)頁(yè)的form中post的一模一樣)
具體的格式看看帶的MsMultiPartFormData.pas
其實(shí)可以用例子中帶的MsMultiPartFormData.pas,,它里面已經(jīng)封裝的很好了,。


#8樓 得分:0回復(fù)于:2003-06-12 13:31:25
我的email:   [email protected]  
如果需要我把我這邊的例子發(fā)給你
#9樓 得分:0回復(fù)于:2003-06-12 14:50:56
能給我也發(fā)一個(gè)嗎,謝謝
[email protected]
#10樓 得分:0回復(fù)于:2003-06-13 14:53:12

例子里面帶的例子indy版本要求比較新,,好像多了一些屬性方法
在新版本的indy里面已經(jīng)封裝了這種應(yīng)用,有一個(gè)unit叫IdMultipartFormData.pas
裝新版本indy時(shí),,必須把老的indy文件完全刪除干凈,,不然裝起來(lái)老報(bào)錯(cuò)。

我在csdn里說(shuō)的是用MsMultiPartFormData.pas(它實(shí)現(xiàn)發(fā)送格式化的請(qǐng)求stream)

你可以直接包含該單元就可以了,,這個(gè)只用到indy的post方法,,應(yīng)該delphi自帶的indy就可以用了

網(wǎng)上下載的那個(gè)例子indy版本較高,。我改了一下,,在附件里,你現(xiàn)在應(yīng)該可以用了

看完這個(gè)應(yīng)該能解決你的問(wèn)題,,我的問(wèn)題跟你一樣,。
#11樓 得分:0回復(fù)于:2003-06-13 15:15:18
收到
thanks
  • wood_ke用戶頭像
  • wood_ke
  • (天煞孤星)
  • 等 級(jí):
#12樓 得分:0回復(fù)于:2003-06-13 16:31:55
能給我一個(gè)嗎?,?
我找了好久?。?!謝謝??!
[email protected]
#13樓 得分:0回復(fù)于:2003-06-16 16:56:52
附帶的例子由于indy版本的問(wèn)題,有點(diǎn)小問(wèn)題(其實(shí)用文本工具修改一下dfm,去掉新增的屬性就可以了),。我干脆把源碼給貼出來(lái)吧,,版權(quán)屬于原作者

一.用于實(shí)現(xiàn)form流格式的單元(MsMultiPartFormData.pas)
unit   MsMultiPartFormData;

interface

uses
    SysUtils,   Classes;

const
    CONTENT_TYPE   =   'multipart/form-data;   boundary= ';
    CRLF   =   #13#10;
    CONTENT_DISPOSITION   =   'Content-Disposition:   form-data;   name= "%s " ';
    FILE_NAME_PLACE_HOLDER   =   ';   filename= "%s " ';
    CONTENT_TYPE_PLACE_HOLDER   =   'Content-Type:   %s '   +   crlf   +   crlf;
    CONTENT_LENGTH   =   'Content-Length:   %d '   +   crlf;

type
    TMsMultiPartFormDataStream   =   class(TMemoryStream)
    private
        FBoundary:   string;
        FRequestContentType:   string;
        function   GenerateUniqueBoundary:   string;
    public
        procedure   AddFormField(const   FieldName,   FieldValue:   string);
        procedure   AddFile(const   FieldName,   FileName,   ContentType:   string;   FileData:   TStream);   overload;
        procedure   AddFile(const   FieldName,   FileName,   ContentType:   string);   overload;
        procedure   PrepareStreamForDispatch;
        constructor   Create;
        property   Boundary:   string   read   FBoundary;
        property   RequestContentType:   string   read   FRequestContentType;
    end;

implementation

{   TMsMultiPartFormDataStream   }

constructor   TMsMultiPartFormDataStream.Create;
begin
    inherited;
    FBoundary   :=   GenerateUniqueBoundary;
    FRequestContentType   :=   CONTENT_TYPE   +   FBoundary;
end;

procedure   TMsMultiPartFormDataStream.AddFile(const   FieldName,   FileName,
    ContentType:   string;   FileData:   TStream);
var
    sFormFieldInfo:   string;
    Buffer:   PChar;
    iSize:   Int64;
begin
    iSize   :=   FileData.Size;
    sFormFieldInfo   :=   Format(CRLF   +   '-- '   +   Boundary   +   CRLF   +   CONTENT_DISPOSITION   +
        FILE_NAME_PLACE_HOLDER   +   CRLF   +   CONTENT_LENGTH   +
            CONTENT_TYPE_PLACE_HOLDER,   [FieldName,   FileName,   iSize,   ContentType]);

    Write(Pointer(sFormFieldInfo)^,   Length(sFormFieldInfo));
    FileData.Position   :=   0;
    GetMem(Buffer,   iSize);
    try
        FileData.Read(Buffer^,   iSize);
        Write(Buffer^,   iSize);
    finally
        FreeMem(Buffer,   iSize);
    end;
end;

procedure   TMsMultiPartFormDataStream.AddFile(const   FieldName,   FileName,
    ContentType:   string);
var
    FileStream:   TFileStream;
begin
    FileStream   :=   TFileStream.Create(FileName,   fmOpenRead   or   fmShareDenyWrite);
    try
        AddFile(FieldName,   FileName,   ContentType,   FileStream);
    finally
        FileStream.Free;
    end;
end;

procedure   TMsMultiPartFormDataStream.AddFormField(const   FieldName,
    FieldValue:   string);
var
    sFormFieldInfo:   string;
begin
    sFormFieldInfo   :=   Format(CRLF   +   '-- '   +   Boundary   +   CRLF   +   CONTENT_DISPOSITION   +   CRLF   +   CRLF   +
        FieldValue,   [FieldName]);
    Write(Pointer(sFormFieldInfo)^,   Length(sFormFieldInfo));
end;

function   TMsMultiPartFormDataStream.GenerateUniqueBoundary:   string;
begin
    Result   :=   '--------------------------- '   +   FormatDateTime( 'mmddyyhhnnsszzz ',   Now);
end;

procedure   TMsMultiPartFormDataStream.PrepareStreamForDispatch;
var
    sFormFieldInfo:   string;
begin
    sFormFieldInfo   :=   CRLF   +   '-- '   +   Boundary   +   '-- '   +   CRLF;
    Write(Pointer(sFormFieldInfo)^,   Length(sFormFieldInfo));
    Position   :=   0;
end;
end.

二。調(diào)用的方法:
    1,。先包含MsMultiPartFormData(uses   MsMultiPartFormData;)
    2,。把如下代碼加到需要的地方
var
    ResponseStream:   TMemoryStream;
    MultiPartFormDataStream:   TMsMultiPartFormDataStream;
begin
    MultiPartFormDataStream   :=   TMsMultiPartFormDataStream.Create;
    ResponseStream   :=   TMemoryStream.Create;
    try
        IdHttp1.Request.ContentType   :=   MultiPartFormDataStream.RequestContentType;
//添加表單的字段   (前一個(gè)參數(shù)是字段名,后一個(gè)參數(shù)是字段值)
        MultiPartFormDataStream.AddFormField( 'PersonName ',   edtPersonName.Text);
        MultiPartFormDataStream.AddFormField( 'Description ',   edtDescription.Text);
//添加上載的文件(第一個(gè)是字段名,,第二個(gè)是文件名,,第三個(gè)是文件類型)
        MultiPartFormDataStream.AddFile(edtFile.Name,   edtFile.Text,   edtMIMEType.Text);
        {   You   must   make   sure   you   call   this   method   *before*   sending   the   stream   }
        MultiPartFormDataStream.PrepareStreamForDispatch;
        MultiPartFormDataStream.Position   :=   0;
//調(diào)用idhttp的post方法,第一個(gè)參數(shù)是用于處理上載form的asp/php等等腳本,,第三個(gè)是接收腳本執(zhí)行完成后的返回內(nèi)容)
        IdHTTP1.Post( "http://xxx./upload.asp ",   MultiPartFormDataStream,   ResponseStream);
    finally
        MultiPartFormDataStream.Free;
        ResponseStream.Free;
    end;
end;


從這些代碼可以引出很多應(yīng)用:
1,。asp里調(diào)用其它腳本語(yǔ)言如(php,jsp,等等)。把這段代碼用組件實(shí)現(xiàn),,在asp中調(diào)用,,就可以     了。
2,。從普通的應(yīng)用程序調(diào)用asp,php等等腳本
3,。傳統(tǒng)的html中,必須在瀏覽器中選擇文件,,才能上載(號(hào)稱是為了安全),,通過(guò)這個(gè)就可以實(shí)現(xiàn)
不通過(guò)選擇文件,實(shí)現(xiàn)上載,。

  • wood_ke用戶頭像
  • wood_ke
  • (天煞孤星)
  • 等 級(jí):
#14樓 得分:0回復(fù)于:2003-06-18 15:15:36
hao

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多