我有一些具有.jpeg
文件扩展名的 Perl 脚本,当我在资源管理器中选择该文件时,我想在 Visual Studio Code 中看到文本代码,而不是 VSCode 尝试将其加载到图像编辑器中。
有没有办法.jpeg
从 VSCode 使用的扩展中删除以决定是否在图像查看器而不是文本编辑器中加载?
我尝试添加,{"*.jpeg": "plaintext"}
但files.associations
没有效果。
更新: 好吧,伙计们,我知道你们都是好心人,想谈谈我的 perl 技能,但我已经熟练掌握了 perl 部分。我想我应该改正我的错误,没有解释清楚为什么扩展是.jpeg
。
如果我想知道潜在的骗子是否是本地人,我会发送一个他们点击的图片链接,然后检查我的日志并收到一封包含他们 IP 的电子邮件,因为.jpeg
他们点击的文件实际上是一个 perl 脚本,在输出数据之前会记录他们的 IP .jpeg
。如果我发送一个我声称是图片的链接,但它以 .cgi 或 .pl 结尾,他们可能不会点击它,我也无法知道他们是本地人还是在尼日利亚。这已经通过 Apache 服务器完美地运行了。
我已经从这个问题中删除了 Perl 标签。这篇文章的目的是能够使用 VSCode 将任何文件作为文本文件打开,无论扩展名是什么。谢谢!
答案1
Perl 脚本需要.pl
扩展。不是.jpg
。
如果 Perl 脚本输出 JPEG 图像,则content-type
在 Perl 脚本本身中设置适当的标题;命名文件.jpg
是一种临时办法,并不是一个好的做法。
在您发表的评论我现在已将您提出的问题添加到以下内容中:
“顺便说一下,它必须有一个 jpg 扩展名,因为它在 cgi-bin 中运行并在记录时输出图像数据,但需要 jpg 扩展名才能在浏览器中呈现为 jpg。”
不,Perl 脚本(或任何脚本)不需要 JPEG 扩展来将 JPEG 图像传送到 Web 浏览器。
你的问题问反了,这是一个经典问题XY问题问题。不知何故,您已经决定让 Perl 将图像渲染为图像的唯一方法是将 Perl 脚本的文件扩展名设置为,而.jpeg
这充其量只是一个临时解决方案。
你不要需要设置 JPEG 扩展,以便将输出在浏览器中呈现为 JPEG。您需要获取 Perl 脚本来输出Content-Type
标头image/jpeg
,就是这样。
我在 PHP 中已经做过几十次了;Perl 也可以做到。阅读以下文章了解如何做到这一点此 Stack Overflow 帖子. 该主题中有大量有用的信息。
此示例来自Stack Overflow 线程中的这个答案似乎是最好的起点;请注意,我将 改为type
并image/jpeg
删除了expires
标题以保持简单。有关CGI::header
工作原理的更多信息,请参见找到这里:
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
my $gfx='';
$gfx = makeImage();
print CGI::header(
type=>'image/jpeg',
content_length=>length($gfx)}
);
print $gfx;
因此,您可以测试这些内容以确保发送了正确的标头,您可以使用这个 Curl 命令;URL 当然是一个模型,因为我不知道您是如何设置的:
curl -ILk https://example.com/cgi-bin/image.pl
输出结果如下:
HTTP/1.1 200 OK
Date: Wed, 01 Mar 2023 17:58:48 GMT
Server: Apache
Content-Length: 38421
Content-Type: image/jpeg
只要Content-Type
正确设置了图像的标题,并Content-Length
反映了图像文件的实际长度,图像就应该可以在浏览器中查看。
额外想法:对于这里的核心问题来说不是必需的,但以防万一还是知道一下的好。
为了获得加分,你甚至可以使用标题设置图像的文件名,Content-Disposition
标题看起来如下
"Content-Disposition: attachment; filename=filename.jpeg)"
如何在 Perl 中设置它?我不是 100% 确定,但我相信你可以print CGI::header
在 Perl 代码中将其更改为如下所示的内容;请考虑以下伪代码:
print Center code hereGI::header(
type=>'image/jpeg',
content_length=>length($gfx)},
content_disposition=>'inline',
filename="FileName"'
);
但不要引用我的最后一点信息;我不是一个熟练的 Perl 程序员。但一般的想法是将设置为Content-Disposition
,inline
然后设置文件名值。