Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何将字符串作为.csv文件下载,而不将字符串写入文件并从文件中读取?_Perl_Download_Cgi - Fatal编程技术网

Perl 如何将字符串作为.csv文件下载,而不将字符串写入文件并从文件中读取?

Perl 如何将字符串作为.csv文件下载,而不将字符串写入文件并从文件中读取?,perl,download,cgi,Perl,Download,Cgi,我正在重新设计一个网站,根据用户选择的选项,我需要从数据库中获取数据,然后以可下载的格式提供给用户。我正在将数据提取到一个字符串变量中,但我不想将其写入文件,然后再编写下载代码。我想将字符串下载到客户端的一个文件中。我正在为此使用perl 之前,我使用以下perl cgi代码从文件中读取和下载: ... my $ID = "details.csv"; my @fileholder; my $filesloc = "/html/details.csv"; open(DLFILE,'<',"

我正在重新设计一个网站,根据用户选择的选项,我需要从数据库中获取数据,然后以可下载的格式提供给用户。我正在将数据提取到一个字符串变量中,但我不想将其写入文件,然后再编写下载代码。我想将字符串下载到客户端的一个文件中。我正在为此使用perl

之前,我使用以下perl cgi代码从文件中读取和下载:

...
my $ID = "details.csv";
my @fileholder;
my $filesloc = "/html/details.csv";

open(DLFILE,'<',"$files_loc") || Error('open','file');
@fileholder = <DLFILE>;
close(DLFILE)

print "Content-Type:application/x-download\n";
print "Content-Disposition:attachment;filename=$ID\n\n";
print @fileholder;
在.pm文件中,但它正在屏幕上打印上述行,而不是打开“另存为”对话框。两者都是perl,那么我哪里出了问题


<>编辑:我知道原因,这是因为我以前打开了一个HTML内容类型,然后在中间,我打开了“内容类型:文本/平原\”-这是浏览器迷惑的地方。现在,有人能告诉我如何关闭以前的html内容类型并打开此新内容类型以供下载吗?

这是因为浏览器正在查看您使用
print“content type:text/plain\n”创建和发送的内容类型-正如@Julian所提到的,您可以尝试将该行改回或添加
打印“Content Type:application/x-download\n”行text/plain
行后面加上code>,看看这是否解决了问题。由于该特定内容类型实际上可能需要一个真正的文件来处理,因此您可以尝试其他内容类型(请参见@Hunter McMillen的建议),因为在这种情况下,浏览器可能会提供下载/保存对话框

您可能需要添加以下内容来愚弄浏览器(并删除
文本/csv
):


好的,看起来一个响应只能设置一个内容类型。因此,我现在从当前页面导航到另一个页面,在那里我正在编写下载代码。谢谢你的帮助

那么,您更改了内容类型,现在浏览器的行为有所不同?您是否尝试将其更改回原来的格式?是否应该是
text/csv
?我首先使用print“Content-type:text/html\n”启动perl脚本-这是因为我使用该perl脚本打印html页面。但是,在同一个文件中,我还需要一个下载代码,在那里我必须使用朱利安告诉我的打印“内容类型:text/csv”。但当我这样做时,浏览器只考虑第一种内容类型,实际上是html格式,并在页面上逐字打印“Content-type:text/csv”行。所以,为了关闭html内容类型并打开此文本/csv内容类型,我必须做什么?编辑响应。如果你加上最后提到的两行呢?我加了,它会在屏幕上打印这些行。
my $ID = "details.txt";
my @fileholder = qw(name age address);
print "Content-Type:text/plain\n";
print "Content-Disposition:attachment;filename=$ID\n\n";
print @fileholder;
print "Content-Type:application/x-download\n";     
print "Content-Disposition:attachment;filename=$ID\n\n";