Delphi 7 ISAPI WebBroker file upload

醉酒当歌 提交于 2019-12-08 03:33:19

问题


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.


回答1:


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;



回答2:


I wrote something similar once here: https://github.com/stijnsanders/xxm/blob/master/Delphi/common/xxmParams.pas#L159 but that may be tightly coupled with SplitHeaderValue that parses the header lines, and TStreamNozzle that throttles incoming data. (and TXxmReqPar... objects, and IXxmContext...)

(Of course you're warmly welcomed to accept file uploads with xxm...)



来源:https://stackoverflow.com/questions/27155153/delphi-7-isapi-webbroker-file-upload

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!