我一直很难完成必须完成的一项非常正常的任务。我将图像上传并保存到Web服务器,并将该文件的路径保存在MySQL数据库中(这一切正常)。不起作用的是从服务器获取图像文件,并通过ajax在页面上显示它。
最初,我只是尝试从数据库中检索路径,并src
使用图像的路径更新标签的属性。这是可行的,但是所有映像都位于服务器上的文件夹中,所有人都可以访问它们。不是很好。我只能让这些用户访问属于某些用户的图片。
为了限制对这些照片的访问,我在该文件夹上添加了一个Apache指令,该指令成功地限制了访问。然后,问题变成了我无法通过将src
属性设置为该路径来在浏览器中显示图像。见我的帖子:https :
//serverfault.com/questions/425974/apache-deny-access-to-images-folder-but-
still-still-able-to-display-via-img-on-
site
最终,我了解到必须使用PHP直接从服务器读取图像数据并将其发送到浏览器。我使用过file_get_contents()函数,该函数可将服务器上的图像文件(PNG)转换为字符串。我通过ajax调用将该字符串返回给浏览器。我无法获得的是:
如何使用JavaScript将字符串转换回图像?
参见以下代码:
$.ajax({
url: get_image.php,
success: function(image_string){
//how to load this image string from file_get_contents to the browser??
}
});
您可以向禁止访问该图像的用户显示默认的“禁止访问”图像:
<?php
$file = $_GET['file']; // don't forget to sanitize this!
header('Content-type: image/png');
if (user_is_allowed_to_access($file)) {
readfile($file);
}
else {
readfile('some/default/file.png');
}
并且,在客户端:
<img src="script.php?file=path/to/file.png" />
另外,如果您确实希望或需要通过Ajax发送数据,则可以对Base64进行编码:
<?php
echo base64_encode(file_get_contents($file));
并img
使用数据URI方案将响应放入标签中
var img = '<img src="data:image/png;base64,'+ server_reponse +'"/>';
假设Base64编码的数据明显大于原始数据,则可以发送原始数据并使用library在浏览器中对其进行编码。
这对您有意义吗?
问题内容: 我有一个运行着Jersey REST资源的Web服务器,我想知道如何获取浏览器img标签的image / png参考;提交表单或获得Ajax响应后。用于添加图形的图像处理代码正在运行,只需以某种方式返回即可。 码: 干杯 问题答案: 我不认为在REST服务中返回图像数据是一个好主意。它占用了应用程序服务器的内存和IO带宽。最好将任务委派给针对这种传输进行了优化的适当的Web服务器。您可
问题内容: TL; DR; 上传之前,有没有一种方法可以直接在浏览器端压缩图像(主要是jpeg,png和gif)?我很确定JavaScript可以做到这一点,但是我找不到实现它的方法。 这是我要实现的完整方案: 用户访问我的网站,然后通过元素选择图片, 该图片是通过JavaScript检索的,我们进行了一些验证,例如正确的文件格式,最大文件大小等, 如果一切正常,则会在页面上显示图像的预览, 用户
问题内容: 我要尝试做的就是从服务器中搜索文件并显示图片。HTML有一个简单的搜索栏,您可以输入搜索词。JavaScript使用ajax请求来调用PHP文件,然后PHP在服务器上找到图像并将其发送回以显示。 现在发生的是该图像没有显示,并且我得到一个图标,指示一些无效的图像。Ajax调用似乎正在运行,但是我认为我发回的数据不正确。我一直在尝试搜索它,但是每个人似乎对如何执行它都有不同的看法,这有点
问题内容: 我正在尝试使用HttpUrlConnection将图像发送到服务器,因为它是Google推荐的。我决定将图像转换为Base64字符串,然后将其发送到服务器,然后将其解码为.jpg文件。但是这种方法仅适用于小尺寸缩略图,而我无法发送全尺寸图像。 这是android客户端代码: Node.js服务器代码: 由于BufferedWriter的大小限制,我无法对完整尺寸的图像使用相同的方法-b
我正在尝试使用gRPC和ProtoBuf将图像从Java客户端发送到Python服务器。我将图像编码为ByteString,并使用blockingStub发送它。Python服务器接收ProtoBuf,但Java ByteString现在是Python str。我不知道如何从str恢复图像。 当我调用服务器时: 它提出: 回溯(最近一次调用): 文件“/usr/local/lib/python2.
问题内容: 我正在为我的应用程序使用烧瓶。我想将图像(由PIL动态生成)发送给客户端,而不保存在磁盘上。 任何想法如何做到这一点? 问题答案: 首先,你可以将映像保存到临时文件并删除本地文件(如果有): 其次,将临时文件设置为响应(根据此stackoverflow问题):