为什么CGI.pm在成功上传新文件时上传文件的旧版本?

时间:2010-09-23 13:15:22

标签: perl upload cgi

我使用CGI.pm版本3.10使用Perl进行文件上传。我有一个上传文件的Perl脚本,我的一个应用程序通过签到签出设施跟踪上传文档的不同修订版。

重新创建步骤:

  • 我使用我的应用程序(基于网络使用apache)完成了结账(下载文件)。
  • 从当前用户会话退出。
  • 使用相同的凭据再次登录,然后签入(上传)新文件。

输出:

  • 上传成功
  • Perl上传脚本显示正确的上传数据
  • 创建的文件的新版本

除了一个问题

之外,输出是正确的和预期的

问题:

  • 新上传文件的内容与数据库中上次上传的修订内容相同。

我正在使用临时文件夹复制新内容,如果我在上传脚本中打印新内容,那么它就是正确的。我对CGI上传大小没有限制。它似乎在CGI环境中某处失败可能是我正在使用的版本。我没有使用污点模式。

有人可以帮我理解可能的原因吗?

2 个答案:

答案 0 :(得分:1)

听起来你在文件上传字段中遇到旧文件名。不确定文件字段是否会发生这种情况,但这是其他字段类型的功能。

尝试添加-nosticky pragma,例如use CGI qw(-nosticky :all);。另一个尝试的pragma是-private_tempfiles,它应该阻止用户甚至在他们自己的上传中“窃听”。

当然,可能需要本地化(我的)某个变量或将-force添加到文件域。

答案 1 :(得分:0)

我发现了这个问题。原因是复制文件的目标路径不正确,这是因为我的应用程序事件之一将复制文件的路径映射到不同的目录,并且此路径存储在用户会话中。只有在我盯着上传脚本之前运行事件时才会发生这种情况。这就是它难以捕捉的原因。由于上传脚本旨在从同一路径中选择新复制的文件,因此它总是最终将数据库中的相同文件上载到另一个版本。新复制的文件位于新路径中。

通过在上传之前映射正确的路径来解决。

由于