Delphi 7 ISAPI WebBroker文件上传

时间:2014-11-26 17:15:50

标签: delphi delphi-7 webbroker

我正在尝试接受Delphi 7 Webbroker CGI中的文件上传。

我使用的是Shiv Kumar的TMsMultipartParser,但我的Chrome有问题。我无法访问已解析的数据(令人惊讶的是,Explorer工作正常)。

这是我的代码:

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;

根据建议here,我尝试使用http://www.mrsoft.org/Delphi/MultipartParser.pas但我无法编译它。它使用了一个名为UniversalUtils的单元,我无法在任何地方找到它。

我知道这是一项非常陈旧的技术。几乎所有对它的引用都已经从网上消失了(相信我,我已经搜索过了)。购买任何帮助将深表赞赏。

感谢。

2 个答案:

答案 0 :(得分:2)

我终于解决了我的问题,感谢@mrabat。 这个项目从Delphi 5开始。后来升级到Delphi 7(它无法进一步升级,因为很多部分不能支持Unicode字符串,我们使用ANSI)。 我们使用的是Shiv的TMsMultipartParser,因为Delphi 5没有包含任何解析器。 Delphi 7在ReqMulti.pas单元中有TMultipartContentParser,它运行良好。

对于任何需要示例的人,我都会发布我的工作代码:

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;

答案 1 :(得分:0)

我曾在这里写过类似的东西: https://github.com/stijnsanders/xxm/blob/master/Delphi/common/xxmParams.pas#L159 但这可能与解析标题行的SplitHeaderValue紧密耦合,并且TStreamNozzle会限制传入的数据。 (和TXxmReqPar...个对象,以及IXxmContext ...)

(当然,您热烈欢迎使用xxm接受文件上传...)