为啥 http 上传时没有创建 //Windows/Temp 临时文件?

Posted

技术标签:

【中文标题】为啥 http 上传时没有创建 //Windows/Temp 临时文件?【英文标题】:Why is the //Windows/Temp temporary file not being created on an http upload?为什么 http 上传时没有创建 //Windows/Temp 临时文件? 【发布时间】:2021-09-15 13:03:31 【问题描述】:

我正在 Windows 10(当前)、Apache/2.4.39 (Win64)、mod_perl/2.0.10 和 Perl/v5.26.3 平台上开发应用程序。语言集是 dhtml(html、css、javascript、Perl 和 C。

我做了一个 http(来自 Perl)上传,并在 //Windows/Temp 目录中获取应该在服务器上创建的临时文件名,如下所示。

$upload_filehandle = $page->upload('filex'); # File handle to uploaded file.
my $tmpfilename = $page->tmpFileName( $upload_filehandle );

上传文件句柄是在没有客户端目录的情况下要上传的客户端文件的正确名称(在我测试的6个浏览器中都是如此)。第二行返回一个字符串,该字符串看起来像 //Windows/Temp 目录中其他临时文件的名称。并创建了临时文件 在具有正确内容的 //Windows/Temp 目录中。我知道这一点,因为我用不同的名称制作了副本。

但是临时文件内容没有加载到目标文件中。 目标文件在正确的位置具有正确的名称和正确的日期/时间,但字节数为零。

我在 Apache 日志文件中没有收到任何错误,也没有控制台消息,我正在使用“使用诊断;”运行。调试器总是有一个每次都不同的 glob 语句( GLOB(0x2a0cc0d06c0) ),它是在上传循环之后生成的。同样,在正确的位置创建了一个文件,名称和日期/时间都正确,但字节数为零。

接下来是服务器目标文件的写循环。 $filex 文件名是正确的。 $upload_filehandle 是没有目录的客户端文件的名称,它使用 tmpFileName(上图)转换为服务器上的 //Windows/Temp 目录中的临时文件,该目录具有正确的内容。但内容并未传输到目标文件。

open(my $UF_fh,'>',$filex) || croak "Couldn't open file $filex, $!"; # Server file to upload to.     

if (index(lc($thefn),'.gif') > -1) 
  binmode($UF_fh); # Set file output to binary mode if image.
       

while ( <$upload_filehandle> )        
  print $UF_fh; # Write it out.


close $UF_fh;

感谢任何帮助。谢谢。

ct

【问题讨论】:

【参考方案1】:

一个似乎有效的答案,但不是它应该工作的方式。我有临时文件的完全限定名称,所以我将它复制到目标文件。副本不需要 binmode() 工作。它确实有效,但我仍然希望了解如何使其应该如何工作。 ct

【讨论】:

以上是关于为啥 http 上传时没有创建 //Windows/Temp 临时文件?的主要内容,如果未能解决你的问题,请参考以下文章

http下载文件时为啥同时也有上传流量?如题 谢谢了

从windows向Linux上传文件,为啥用RZ命令上传文件后,文件权限为600,而其他文件权限都为644?

将文件上传到 Azure Blob 存储时没有触发事件网格事件——为啥?

为啥我不能下载用 PHP 上传的文件?

为啥上传图片时收不到响应数据?

为啥共享访问时,在共享IP前要加2和斜杠,???反方向的斜杠就不行?