经过与Indy的代码对比还是要提问下,请unsigned大侠指点下!asp.net程序:<input type="upfile" id="MyFile" runat="server" />
...
private void Page_Load(object sender, System.EventArgs e)
{
   if(MyFile.PostedFile!=null)
   {
     string strSaveDir = "./upload/";
     string strName = MyFile.PostedFile.FileName;
     int intPath = strName.LastIndexOf("\\");
     string strNewName = strName.Substring(intPath); 
     MyFile.PostedFile.SaveAs(Server.MapPath(strSaveDir + strNewName)); 
   }
}
在Indy中可以进行:
MutPartForm := TIdMultiPartFormDataStream.Create;
...IdHTTP.Request.ContentType := MutPartForm.RequestContentType;
MutPartForm.AddFile('upfile', fileName, 'jpg');
MutPartForm.Position := 0;
aIdHTTP.Post(URL, MutPartForm,ResponseStream);
...
问题:
如何运用ICS的THttpCli上传文件?非常感激!

解决方案 »

  1.   

    本贴与.net无关,即便是asp的页面也是同样的道理。ICS的THttpCli中有没有类似Indy中的TIdMultiPartFormDataStream类呢?
    大侠,一直在等待你之中!
      

  2.   

    ICS 哪个版本?ICS 有DEMO, httpasp.dpr
    ICS V7 alpha1 
      

  3.   

    ICS 6
    看到上面的Demo
    procedure THttpTestForm.SendButtonClick(Sender: TObject);
    var
        DataIn  : TMemoryStream;
        DataOut : TMemoryStream;
        Buf     : String;
    begin
        DisplayMemo.Clear;
        DataIn  := TMemoryStream.Create;
        DataOut := TMemoryStream.Create;
        try
            Buf     := 'suplno=' + Trim(SupplierIDEdit.Text) +
                       '&PIN=' + Trim(PinEdit.Text) +
                       '&LOGIN=Login';
            DataOut.Write(Buf[1], Length(Buf));
            DataOut.Seek(0, soFromBeginning);        httpcli1.SendStream := DataOut;
            httpcli1.RcvdStream := DataIn;
            httpcli1.Proxy      := 'intsrv02';
            httpcli1.ProxyPort  := '80';
            HttpCli1.Cookie     := 'ASPSESSIONID=OUYRWOSPOFGGPSSF';
            HttpCli1.URL        := 'http://www.transmed.co.za/webserv/menu.asp';        SendButton.Enabled := FALSE;
            try
                httpcli1.Post;
            finally
                SendButton.Enabled := TRUE;
                DataIn.Seek(0, 0);
                DisplayMemo.Lines.LoadFromStream(DataIn);
            end;
        finally
            DataOut.Free;
            DataIn.Free;
        end;
    end;问题:
    这个例子只是直接传一个URL,如何像Indy中将
    asp中<input type="upfile" id="MyFile" runat="server" />的文件
    赋值MutPartForm.AddFile('upfile', fileName, 'jpg')?

    我用httpcli1.SendStream 测试过不对,请朋友你指点!
      

  4.   

    asp.net程序:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="WebTest.Server_Test" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <input id="MyFile" name="MyFile" type="file"  runat="server"  />&nbsp; <br />
            <asp:Button ID="Submit" runat="server" onclick="Submit_Click" Text="Button" />
        </div>
        </form>
    </body>
    </html>using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;namespace WebTest
    {
        public partial class Server_Test : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                //
            }        protected void Submit_Click(object sender, EventArgs e)
            {
                if (MyFile.PostedFile.ContentLength > 0)
                {
                    string strSaveDir = "./upload/";
                    string strName = MyFile.PostedFile.FileName;
                    int intPath = strName.LastIndexOf("\\");
                    string strNewName = strName.Substring(intPath);
                    MyFile.PostedFile.SaveAs(Server.MapPath(strSaveDir + strNewName));
                    Response.Write("return=succ");
                }
            }
        }
    }Delphi 的ICS发送程序,这个地方有问题的!procedure THttpTestForm.SendButtonClick(Sender: TObject);
    var
        DataIn  : TMemoryStream;
        DataOut : TMemoryStream;
        Buf     : String;
    begin
        DisplayMemo.Clear;
        DataIn  := TMemoryStream.Create;
        DataOut := TMemoryStream.Create;
        try
            Buf     := 'MyFile=d:\test.jpg' +
                       '&Submit=Submit';
            DataOut.Write(Buf[1], Length(Buf));
            DataOut.Seek(0, soFromBeginning);        httpcli1.SendStream := DataOut;
            httpcli1.RcvdStream := DataIn;
            HttpCli1.URL        := 'http://localhost/test.aspx';
            SendButton.Enabled := FALSE;
            try
                httpcli1.Post;
            finally
                SendButton.Enabled := TRUE;
                DataIn.Seek(0, 0);
                DisplayMemo.Lines.LoadFromStream(DataIn);
            end;
        finally
            DataOut.Free;
            DataIn.Free;
        end;
    end;
      

  5.   

    我没试过,最麻烦就是没ASP服务器,更不想装 IIS
      

  6.   

    Indy比较好写,我一开始就介绍了,用ICS还真不会。
    希望知道的朋友能指点下。
      

  7.   

    再简单举例说,在一个asp.net登录界面中有id和password(没有验证符),点击login登录到相关页面。
    这个让ICS的THttpCli来做,如何填入id和password这两个参数?如何模拟点击login这个事件?
      

  8.   

    虽然在ICS中有这样的例子,但是提供的WEB服务器也是他们的一个例子(OverbyteIcsWebServ),
    下面是他们提交FirstName和LastName的方法:
    procedure THttpPostForm.PostButtonClick(Sender: TObject);
    var
        Data : String;
    begin
        Data := 'FirstName=' + UrlEncode(Trim(FirstNameEdit.Text)) + '&' +
                'LastName='  + UrlEncode(Trim(LastNameEdit.Text))  + '&' +
                'Submit=Submit';
        HttpCli1.SendStream := TMemoryStream.Create;
        HttpCli1.SendStream.Write(Data[1], Length(Data));
        HttpCli1.SendStream.Seek(0, 0);
        HttpCli1.RcvdStream := TMemoryStream.Create;
        HttpCli1.URL := Trim(ActionURLEdit.Text);
        HttpCli1.PostAsync;
    end;如何配合ASP.NET使用呢?用上述方法是错误的。还是没人知道吗?
      

  9.   

    我用过  ics  遇到大文件还的改代码 你还不如用 indy10呢  虽然有bug 还是不错的 
      

  10.   

    chinawcs兄弟,能否将你传文件的代码给小弟看下,非常感谢!
      

  11.   

    建议放弃用ICS做文件上传的东西,采用Indy吧,虽然有些Bug但影响不大的。
    呵呵。
      

  12.   

    需要在SendStream里继续写上要上传的文件内容,sendstream里应该是一个模拟ie提交的完整的http头以及内容