如何使用<a>标签下载大尺寸图像

时间:2019-07-14 19:04:16

标签: javascript php html

我正在尝试连接到数据库并从那里查看图片。尽管显示了所有图片,但无法下载。要下载,我使用标签。

这是我的代码。

while($row = mysqli_fetch_array($result))  
                    {  
                         echo '  
                              <tr>  
                                   <td align="center"> 
                                        <a href="data:image/jpeg;base64,'.base64_encode($row['Pilt'] ).'" download>
                                            <img src="data:image/jpeg;base64,'.base64_encode($row['Pilt'] ).'" width=400 class="img-thumnail" />
                                        </a>
                                   </td>  
                              </tr>  
                         ';  
                    }

这里是我获取图片的数据库的一小部分。 https://imgur.com/yZGsFzb。因此,我注意到只下载了一张照片,大小为150.4KiB。

我希望通过单击图像(任意大小)将其下载。现在,当我单击图像时出现类似https://imgur.com/yZrlIH8的错误,而我想看到类似https://imgur.com/4vkUukp的错误。 我将非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我建议您停止以这种方式打印大量大图像,这些大图像将被硬编码为HTML代码,然后一次全部下载到浏览器的缓存中,共2次(包括单击3次)。这浪费了RAM和带宽。您收到的网络错误可能是由链接中href的大小异常引起的(对于您的浏览器来说,它甚至看上去有点像恶意软件)。

相反,您想首先在PHP脚本上动态提供这些图像(通过将标头设置为'Content-Type: image/png'并打印从数据库中获取的图像内容),并提供指向该脚本的直接URL。

此示例的工作原理与您的屏幕快照中所述的一样,我在指出您应该替换SQL查询以获取图像的位置:

while(for all your rows)  
{  
echo '  
  <tr>  
    <td align="center"> 
      <a href="image.php?id=' . $id . '" download>
        <img src="image.php?link=' . $id . '" width=400 class="img-thumnail" />
      </a>
  </td>  
</tr>';
}

image.php看起来类似于:

<?php
$id = htmlspecialchars($_GET['id']);
header('Content-Type: image/png');
$content = store the image contents from the BD here ($row['Pilt'] in your code);
echo $content;

请注意,image.php是动态提供图像的,我推测每个图像都带有一个ID(也许是您的行ID?如果ID尚未公开,您也可以考虑使用更安全的标识符)。这是PHP中常见的安全做法,因此您不会向攻击者提供绝对的文件路径或其他信息。