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

问题描述 投票:-2回答:1

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

javascript html
1个回答
0
投票

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

如果服务器在您的控制之下,您应该确保提供正确的Content-Type HTTP标头(例如,您必须在PHP中调用库函数,并且在其他语言中应该有类似的方法)。

否则,对于JavaScript中的纯客户端解决方案,您可以使用XMLHttpRequest获取文件(大多数JavaScript工具包都有包装器)。然后,您可以将其转换为base 64,前缀为data:image/png;base64,,并将其用作src元素的img属性(感谢https://stackoverflow.com/a/21508186/324969)。

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

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

由于您已经可以通过将其URL放在img标记中来查看图像,因此您可以在a上绘制img,从画布中提取PNG,从中创建data:image/png;base64,… URL,然后使用这些URL自动打开许多选项卡,或者在您的页面中写入一系列data:网址链接。

您还可以链接到一个小网页,其中只包含您当前使用的img标记:<a href="data:text/html,<img src=%22your_url%22>">link text</a>

© www.soinside.com 2019 - 2024. All rights reserved.