【发布时间】:2015-03-31 20:33:57
【问题描述】:
我正在尝试在提交表单时启动“另存为”对话框。我的表单很简单,我使用Dropzonejs 拖放文件,它看起来是这样的:
<form action="action.epl" class="dropzone" id="dropzone" method="post">
</form>
因此,当用户删除它提交的文件并启动 action.epl 时。在 action.epl 中,我处理文件并将其保存到服务器。然后我试图吐出文件的加密版本。加密已完成,我已将其删除以确保它不是问题的根源,我现在遇到的问题是我无法从服务器下载它。我有以下内容(也在 action.epl 中):
$fileName = 'file.pdf';
$filepath= "/server/path/$fileName";
open (FILE, "<$filepath") or die "can't open : $!";
@fileholder = <FILE>;
close FILE;
print "Content-Type:application/x-downloadn";
print "Content-Disposition:attachment;filename=$fileName";
print @fileholder
它在做 /something/ 因为提交时间是没有这个 sn-p 时的 5 倍。我以为我会得到“另存为”对话框,但没有任何反应。 This tutorial 是我获取信息的地方。
编辑,现在我有了:
$fileName ='file.pdf';
$filepath = "/server/path/$fileName";
print "Content-Type:application/x-download\n";
print "Content-Disposition:attachment;filename=$fileName\n\n";
open FILE, '<', $filepath or die "can't open: $!";
print while <FILE>;
close FILE;
但是,仍然没有对话框。我看到你的文件句柄中有“$”标志。我也试过了。但我认为你不需要那个对吗?
【问题讨论】:
-
您的 HTTP 标头和正文之间需要一个空行。此外,与其将文件读入数组并打印,不如在阅读时打印:
open my $fh, '<', $filepath or die "can't open: $!"; print while <$fh>;。 (请注意,这必须在您打印标题之后进行。还要注意使用词法文件句柄和open的 3-arg 形式,它们通常比 fileglobs 和 2-arg 形式更安全。) -
另外,每个标题应该在它自己的行上:
print "Content-Type: foo\n"; ... -
糟糕,
s/fileglobs/typeglobs/在我的第一条评论中。 -
我进行了编辑,在标题后添加了新行和一个额外的新行。我也以不同的方式使用 open。
-
另外,我有“x-downloadn”,我意识到这是教程中的错字。如果只是修复它就可以修复整个事情。
标签: perl filehandle save-as