delphidelphi-7webbroker

Delphi 7 ISAPI WebBroker file upload


I am trying to accept file uploads in a Delphi 7 Webbroker CGI.

I'm using Shiv Kumar's TMsMultipartParser, but I have a problem with Chrome. I can't access the parsed data (surprisingly, Explorer works fine).

This is my code:

with TMsMultipartFormParser.Create do
begin
    Parse(Request);

    lsExternalID:=ContentFields.Values['external_id'];

    if (lsExternalID='') then
        raise Exception.Create('No external ID');

    for i := 0 to Files.Count -1 do
    begin
        lsFileName:=files[i].FileName;
        //Rename file using external ID (not included for simplicity)
        Files[i].SaveToFile(lsFilename);
    end;
    Response.Content := 'OK';
    free;
end;

As suggested here, I tried to use http://www.mrsoft.org/Delphi/MultipartParser.pas but I can't compile it. It uses a unit called UniversalUtils that I can't find anywhere.

I know this is a very obsolete technology. Almost all references to it have already disappeared from the web (believe me, I have searched). Buy any help would be deeply appreciated.

Thanks.


Solution

  • I finally solved my problem, thanks to @mrabat. This project started in Delphi 5. It was later upgraded to Delphi 7 (it can't be upgraded further, because many parts can't support Unicode strings, we use ANSI). We were using Shiv's TMsMultipartParser because Delphi 5 didn't have any parser included. Delphi 7 has TMultipartContentParser in unit ReqMulti.pas, and it works perfectly.

    For anyone that need an example, I'll post my working code:

    with TMultipartContentParser.Create(Request) do
    begin
        lsExternalID:=ContentFields.Values['external_id'];
        if (lsExternalID='') then
            raise Exception.Create('No external ID');
    
        for i := 0 to Request.Files.Count -1 do
        begin
            lsFileName:=Request.Files[i].FileName;
            //Rename file using external ID (not included for simplicity)
            TMemoryStream(Request.Files[i].Stream).SaveToFile(lsFilename);
        end;
        Response.Content := 'OK';
        Free;
    end;