解析名称中带有百分号(%)的文件名时的TWebRequest问题( Delphi 10.3)

eivgtgni  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(167)

使用TWebRequest(isapi应用程序)接收包含一个或多个文件的POST/multipart/form-data请求。
当文件名包含%符号(例如,“Sales % by date.doc”)时,解析请求时会生成异常(例如,使用request.contentfields.countrequest.extractcontentfields())。唯一的例外是
位置xx处的URL编码字符(% B)无效
或类似的(取决于文件名)。
我尝试拦截文件名并进行更正(例如"Sales %25 by date.doc"),但无法设置Request.Content并进行解析。
我尝试在提交客户端(浏览器)表单之前拦截并重命名该文件,但浏览器对<input type=file>标记进行了限制。
有没有办法改变文件名的解码方式?这是11中修复的错误吗?任何其他提示/技巧将不胜感激。

67up9zun

67up9zun1#

我能够通过访问Web.HTTPApp.pas中的TWebRequest源代码并修改ExtractHeaderFields过程中的代码来解决这个问题。在该过程中,有一个未捕获的TNetEncoding.URL.Decode()示例。我在寻找的行为:如果在Decode操作中出现异常,我希望它在不修改字符串的情况下正常退出。所以,原始代码是:

if Decode then
       Strings.Add(TNetEncoding.URL.Decode(DoStripQuotes(ExtractedField)));
       else Strings.Add(DoStripQuotes(ExtractedField));

字符串
我修改为:

if Decode then begin
    Try
       Strings.Add(TNetEncoding.URL.Decode(DoStripQuotes(ExtractedField)));
       Except On E:Exception Do Begin
          Strings.Add(DoStripQuotes(ExtractedField));
          End;
       End;
    End Else Begin
    Strings.Add(DoStripQuotes(ExtractedField));
    End;


这解决了我的问题。

相关问题