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 というユニットを使用しています。

私はこれが非常に時代遅れの技術であることを知っています。それへのほとんどすべての参照は、すでに Web から消えています (私を信じてください、私は検索しました)。任意のヘルプを購入していただければ幸いです。

ありがとう。

4

2 に答える 2

2

@mrabatのおかげで、ようやく問題を解決しました。このプロジェクトは Delphi 5 で開始されました。後に Delphi 7 にアップグレードされました(多くの部分で Unicode 文字列をサポートできないため、これ以上アップグレードすることはできません。ANSI を使用しています)。Delphi 5 にはパーサーが含まれていなかったため、Shiv の TMsMultipartParser を使用していました。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#L159SplitHeaderValueしかし、それはヘッダー行を解析し、TStreamNozzle受信データを抑制する ことと密接に結びついている可能性があります. (そしてTXxmReqPar...オブジェクト、そしてIXxmContext...)

(もちろん、xxmを使用したファイルのアップロードを受け入れることは大歓迎です...)

于 2014-11-27T08:42:19.187 に答える