我正在尝试连接到数据库并从那里查看图片。尽管显示了所有图片,但无法下载。要下载,我使用标签。
这是我的代码。
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的错误。 我将非常感谢您的帮助。
答案 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中常见的安全做法,因此您不会向攻击者提供绝对的文件路径或其他信息。