问题描述
我正在 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
解决方法
一个似乎有效的答案,但不是它应该的工作方式。我有临时文件的完全限定名称,因此我将其复制到目标文件。副本上不需要 binmode() 工作。它确实有效,但我仍然希望了解如何使其正常工作。 ct