【问题标题】:Get files from TWebRequest in Delphi在 Delphi 中从 TWebRequest 获取文件
【发布时间】:2013-11-14 09:44:43
【问题描述】:

我使用 Delphi 作为服务器来处理许多不同的请求。所有这些都是简单的字符串都可以正常工作,但我在接收文件时遇到了一些问题。

都是使用Webbroker服务实现的,所以我得到一个方法

WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

我有一个 /test 方法,type=mtPost。

在动作内部,我执行以下操作:

MimeType   := Request.ContentFields.Values['MimeType'];
  for i := 0 to Request.Files.Count-1 do begin
    // never entered
    aFile := Request.Files.Items[i];
    ms := TMemoryStream.Create;
    aFile.Stream.Position := 0;
    ms.CopyFrom(aFile.Stream, aFile.Stream.Size);
    ms.SaveToFile(path+aFile.FileName);
    ms.free;
  end;

显然我发送的任何内容都不会被识别为文件,但我不知道为什么。 用于发布的 HTML 如下所示:

<form id="myForm" action="http://localhost:8080/test" method="post" enctype="multipart/form-data">
     <input type="file" size="60" name="myfile">
     <input type="text" size="10" name="mimetype" value="image/hest">
     <input type="submit" value="upload">
 </form>

我会感谢任何人告诉我可能出了什么问题 - 以及如何解决它。 基本上我当时只需要能够接收1个文件,包括mimetype(因为我需要在稍后提供文件时返回它)

【问题讨论】:

  • 尝试使用 FileStream 而不是 MemoryStream
  • 这不会有什么不同,因为我从来没有接触过那部分代码。我的问题是找出/获取文件,而不是存储它。
  • 您好,您有有效的解决方案吗?
  • 我们实际上最终使用了 Svip 建议的变体,我们自己解析多部分表单请求。 ReqMulti 没有按预期添加文件。

标签: delphi delphi-xe3


【解决方案1】:

我遇到了同样的问题,花了很长时间才找到答案。默认情况下,TWebRequest 不处理 Multipart 表单。在您的项目中包含单元 ReqMulti,它将被扩展以支持多部分,并且突然间 Request.Files 对象实际上将包含数据。

附带说明,一旦您使用多部分表单,Request.GetFieldByName 似乎不再有效,但 Request.ContentFields.Values['fieldname'] 可以。

【讨论】:

  • 听起来不错 - 我会在假期回来时尝试一下 :)
  • 我偶然发现了这个答案,它拯救了我的一天!谢谢!这么简单!
  • 这是一个被低估的评论。此解决方案完全适用于 10.2 Tokyo 和 10.3 Rio
【解决方案2】:

您可以简单地读取原始请求并在第一个双换行符处拆分:

Data := Request.ReadUnicodeString(Request.ContentLength);
// Where StrAfter is a function that splits on the first occurrence
// of the first parameter.
Data := Trim(StrAfter(#13#10#13#10, Data));

当然,那只允许你读取一个文件。也许您应该阅读标题以查看每个文件的确切长度以在它们之间拆分Data

【讨论】:

    猜你喜欢
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多