Javascript 如何使浏览器显示服务器在下载提示下发送给我的文件(图像)?

Javascript 如何使浏览器显示服务器在下载提示下发送给我的文件(图像)?,javascript,html,Javascript,Html,我找到的唯一解决方案是抓取带有getElementsByCassName的链接,然后将其注入页面上的html片段中,但它看起来很假,而且也没有必要,我不想要所有的链接 我想一次右键单击一个链接,并将其显示到下一个选项卡。如果我右键单击链接,服务器会向我发送下载提示。我怎么能逃避呢 我认为浏览器会根据MIME类型决定下载或显示文件 如果服务器在您的控制之下,您应该确保您提供了正确的内容类型HTTP头,例如,您必须在PHP中调用库函数,并且在其他语言中也应该有类似的方法 否则,对于JavaScrip

我找到的唯一解决方案是抓取带有getElementsByCassName的链接,然后将其注入页面上的html片段中,但它看起来很假,而且也没有必要,我不想要所有的链接
我想一次右键单击一个链接,并将其显示到下一个选项卡。如果我右键单击链接,服务器会向我发送下载提示。我怎么能逃避呢

我认为浏览器会根据MIME类型决定下载或显示文件

如果服务器在您的控制之下,您应该确保您提供了正确的内容类型HTTP头,例如,您必须在PHP中调用库函数,并且在其他语言中也应该有类似的方法

否则,对于JavaScript中的纯客户端解决方案,可以使用XMLHttpRequest获取文件大多数JavaScript工具包都有包装器。然后,可以将其转换为base 64,结果数据的前缀为:image/png;base64,,并将其用作img元素的src属性

请注意,出于安全考虑,抓取任意文件并将其填充到data:URL中可能不安全。我不知道是否有任何跨站点脚本或CORS攻击可以建立在这个基础上。您必须问一个单独的问题,以了解客户端解决方案是否不安全。对于服务器端,请注意不要为用户上传的数据或服务的端点设置错误的内容类型,例如,让客户端在请求中向您发送它想要的内容类型,尽管看起来很诱人,但这是一个很大的禁忌

要在新选项卡中打开图像,可以像往常一样使用window.open,但要事先使用XMLHttpRequest下载图像,并将数据放入:image/png;base64,…作为新选项卡的URL

由于您已经可以通过将图像的URL放置在img标记中来查看图像,因此您可以将该img绘制在图像上,从画布中提取PNG,制作数据:image/PNG;base64,…URL,然后自动打开包含这些URL的许多选项卡,或者在页面中写入一系列指向数据的链接:URL


您还可以有一个指向一个小网页的链接,其中只包含您当前使用的img标记:。

不要从服务器端添加下载头,也不要调整浏览器设置,使其始终在新选项卡中打开文件,而不是下载。您所说的HTML代码段到底是什么意思?@Georges Duperon I在文档中添加一个img元素,并设置其atribute src到我抓到的链接。它是这样显示的。我必须为所有人做这件事,尽管…@MookKoom我编辑了我的答案,以表明你可以使用数据:…url作为你新标签的url。如果主页可以使用XMLHttpRequest下载图像本身,或者通过在标记中显示图片、在画布上绘制img并从画布中提取PNG,那么您可以自动打开许多选项卡,或者编写一系列指向数据的链接:URL。您还可以有一个指向一个小网页的链接,其中只包含您当前使用的img标记:。顺便欢迎来到StackOverflow-