我正在尝试接受Delphi 7 Webbroker中的文件上传。
我使用的是Shiv的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的单位,我在任何地方都找不到。
我知道这是一项非常过时的技术。几乎所有对它的引用都已经从网上消失了(相信我,我已经搜索过了)。购买任何帮助将是非常感谢的。
谢谢。
发布于 2014-12-02 10:11:45
多亏了@mrabat,我终于解决了我的问题。这个项目从Delphi 5开始,后来升级到Delphi 7(不能进一步升级,因为很多部分不能支持Unicode字符串,我们使用ANSI)。我们使用Shiv的TMsMultipartParser,因为Delphi5没有包含任何解析器。Delphi7在单元TMultipartContentParser中有ReqMulti.pas,它工作得很好。
对于任何需要示例的人,我将发布我的工作代码:
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-11-27 08:42:19
我曾经在这里写过类似的东西:https://github.com/stijnsanders/xxm/blob/master/Delphi/common/xxmParams.pas#L159,但它可能与解析头行的SplitHeaderValue紧密耦合,以及控制传入数据的TStreamNozzle。(以及TXxmReqPar...对象和IXxmContext.)
(当然,我们热烈欢迎您接受xxm的文件上传.)
https://stackoverflow.com/questions/27155153
复制相似问题