簡體   English   中英

Perl CGI通過Web瀏覽器下載文件

[英]Perl CGI to download a file via web browser

需要一些可以從服務器機器下載文件的cgi-perl腳本。 EX:點擊下載鏈接,它將打開一個“另存為”窗口,允許我將文件保存在本地計算機上。

我使用CGI創建了一個網頁,使用這個我將上傳文件到服務器並運行perl腳本將其轉換為其他格式(直到這里我完成了)。 現在我需要將此文件恢復(下載回)到系統。

#!/usr/bin/perl
#print "Content-type: text/html\n\n";
my $filepath='/upload/testing.pm';

    print "Content-Type: text/html\n\n";

    open("DOWNLOADFILE", "<".$filePath);
    while($fileContents = <DOWNLOADFILE>) {
        print $fileContents;
    }
print "Content-Type: text\n";
print "Content-Disposition: attachment; filename='testing.pm'\n";
print "Content-Description: File to download\n\n";
    close DOWNLOADFILE;

將文件從我的機器(客戶端)上傳到服務器機器,在那里我有一個perl腳本,它將文件轉換為另一種格式,並將新轉換的文件保存到目錄ex:/ upload->直到這里我完成了腳本編寫。

現在我需要使用瀏覽器將此文件下載回客戶端計算機。 在這種情況下,我試圖將testing.pm文件下載回客戶端計算機。

重新排列HTML標頭有效。 這是工作腳本。 一個人可以照原樣使用它

use CGI;
my $html= new CGI;
#get the file name from URL ex. http://<server_IP>/cgi-bin/download.cgi?a=testing.txt
my $file= $html->param('a'); 
# $file is nothing but testing.txt
my $filepath= "/var/www/upload/$file";

print ("Content-Type:application/x-download\n");
print "Content-Disposition: attachment; filename=$file\n\n";

open FILE, "< $filepath" or die "can't open : $!";
binmode FILE;
local $/ = \10240;
while (<FILE>){
    print $_;
}

    close FILE;
 # use Unlink if u want to delete the files after download.
#unlink ($filepath);

我認為你剛剛拼寫了你的內容處置標題錯了。 它應該是“依戀”,而不是“附庸”。

更新(以下評論):

好的,所以進一步看,我看到你打印一個CGI標題(Content-Type:text / html)后跟兩個換行符,然后打印更多的CGI標題,並期望瀏覽器注意到它們。 響應中的第一個空白行將告訴瀏覽器標題已完成。 因此,您的第二批標題將被視為內容。

我還看到你第二組標題之前打印文件的內容。 這將使他們的頁腳而不是標題:-)

您需要重新排序代碼,以便只返回一組標題。 然后你返回數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM