我遇到了一个问题,我觉得这很容易。我想实现文件下载,尤其是 .zip文件的文件下载。该文件是在一个单独的脚本中创建的,该脚本经过测试工作。该文件放在服务器上等待其使用。
我的脚本被调用,浏览器的下载对话框显示出来,文件存储到客户端。可是等等! 存档不包含任何文件!
这是我的下载方法:
my $files_location = '/path_to_zip_file';
my $file_name = 'archive.zip';
my $file_size = -s "$files_location/$file_name";
print "Content-Type: application/zip\n";
print "Content-Disposition: attachment; filename=$file_name\n";
print "Content-transfer-encoding: binary\n";
print "Content-length: $file_size\n\n";
open(my $DLFILE, '<', "$files_location/$file_name") or die "$!";
binmode $DLFILE;
print while <$DLFILE>;
close($DLFILE);
显然它以二进制模式打印正确的标题和文件。我的Mozilla Firefox和IE识别该文件并提供存储它。但是当我用winrar或7zip打开它时,它完全是空的。
有没有人对我有什么好的暗示?我做错了什么?我发了很多教程,每个人都这样做......但是当我这样做的时候,就会以这种令人毛骨悚然的方式失败。
感谢您的建议!
修改 其实我得到了工作!我改变了
print "Content-Type: application/zip\n"
到
print "Content-Type: application/x-download\n"
并在文件打印前插入chdir($files_location)
。实际上我并不理解为什么它修复它并且我不会依赖于通过尝试找到的那种软弱的解决方案......对这种行为的任何想法?