把文件存成TMemoryStream后如何用HTTP方式发送给服务器,然后把数据交给ASP处理呀?不想生成临时文件,麻烦知道的告诉一下

解决方案 »

  1.   

    可以考慮使用Socket直接發送Http Post頁面提交指令.當然如果所使用的控件如WebBrower,支持直接流改寫的話也可以.
      

  2.   

    谢谢大家的帮助找了个例子,不过还不能用,因为我把网上下载的图片存为内存流了,现在想把图片在内存流里编辑一下再上传回去,现在还不知道TIdMultiPartFormDataStream怎么把内存流里的书传走procedure TForm1.Button1Click(Sender: TObject);
    var
      data: TIdMultiPartFormDataStream;
    begin
      data := TIdMultiPartFormDataStream.Create;
      try
        { add the used parameters for the script }
        data.AddFormField('param1', 'value1');
        data.AddFormField('param2', 'value2');
        data.AddFormField('param3', 'value3');    { Call the Post method of TIdHTTP and read the result into TMemo }
        Memo1.Lines.Text := IdHTTP1.Post('http://localhost/script.php', data);
      finally
        data.Free;
      end;
    end;
      

  3.   

    TO unsigned:Socket 如何把文件提交给指定页面,比如upload.asp?
      

  4.   

    TIdMultiPartFormDataStream.AddObject好象能用,不过我怎么测试都不成功TIdMultiPartFormDataStream
    procedure AddObject(const AFieldName: string; const AContentType: string; AFileData: TObject; const AFileName: string = '');
    Description
    AddObject成功的给个代码吧!
      

  5.   

    把文件存成 Stringstream可以不?
      

  6.   

    就是用TIdMultiPartFormDataStream.AddObject,加上 TidHTTP 的:
    function Post(AURL: string; const ASource: TIdMultiPartFormDataStream): string; 
    即可。不过,indy9 的某些版本TIdMultiPartFormDataStream有bug
      

  7.   

    To myy上传文件的例子,还没测试//indy一定要用9.0.18版本,否则上传不成功。uses
    IdHTTP,IdMultipartFormData, IdGlobal;//上传jpeg,返回值是服务器端保存的文件名称。
    function UpLoagFile(FileName: String;http: TIdhttp): string;
    var
    obj : TIdMultiPartFormDataStream;
    Url: String;
    begin
    obj := TIdMultiPartFormDataStream.Create;
    try
    obj.AddFile('Image',FileName, GetMIMETypeFromFile(FileName));
    http.Request.ContentType := obj.RequestContentType;
    obj.Position := 0;
    Url := 'http://192.168.1.49/insertImage.aspx'; //这个页面负责接收文件
    try
    Result := http.Post(Url, obj);
    except
    on E: Exception do
    begin
    Application.MessageBox(PChar('上传文件失败,错误原因:' + E.Message), ('错误'), MB_OK + MB_ICONERROR);
    Result := '';
    end;
    end;
    finally
    obj.Free;
    end;
    end;
      

  8.   

    下面的办法可以成功吗?
    给个代码————————————————————————————
    就是用TIdMultiPartFormDataStream.AddObject,加上 TidHTTP 的:
    function Post(AURL: string; const ASource: TIdMultiPartFormDataStream): string; 
    即可。不过,indy9 的某些版本TIdMultiPartFormDataStream有bug