2

我正在尝试在 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;

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

我知道这是一项非常过时的技术。几乎所有对它的引用都已经从网络上消失了(相信我,我已经搜索过了)。购买任何帮助将不胜感激。

谢谢。

4

2 回答 2

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;
于 2014-12-02T10:11:45.397 回答
0

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

(当然欢迎您接受使用xxm上传的文件……)

于 2014-11-27T08:42:19.187 回答