因此我们有一个Node.js的后端工具,用于搜索img标签的HTML网页。我们使用worker child_process执行此操作,以便不阻止主进程。我们在服务器上执行此操作的原因是因为我们在尝试使用AJAX / Angular $ http访问HTML页面时遇到了CORS问题。
当后端网络刮刀完成后,它可以向浏览器发送网址列表。浏览器可以对与这些URL相关的图像进行AJAX请求,但据我所知,前端会遇到与检索HTML时相同的CORS问题。
所以我们目前对这个问题有一个相当糟糕的解决方案。我们使用Cloudinary进行繁重的工作而不是我们的Node.js服务器处理base64。后端worker child_process擦除HTML,获取图像URL,然后向Cloudinary发送请求以检索图像并将我们的服务器发送回新的Cloudinary URL。然后我们将Cloudinary网址发送到前端,前端可以访问那些Cloudinary网址而不会出现任何CORS问题。
这有两个问题:
- 这个速度相当慢 - 抓取大约需要2秒钟,然后等待Cloudinary保存图像并且响应是另外2-4个 秒。因此浏览器必须等待大约4-6秒。
- 我们最终在Cloudinary中存储了大量图像,这将会变得昂贵。我们最终可能会删除约90%的图片 在此过程之后立即,因为用户只是去 选择浏览器中出现的一个图像,但我们是 担心即使图像可能会产生的成本 驻留在Cloudinary上几秒钟。
醇>
有没有人有这些问题的经验,并认为他们有比我们使用的更好的解决方案?
答案 0 :(得分:3)
将我的评论写入答案,因为它似乎可能是您的解决方案。
您可以让服务器从页面中抓取图像URL,然后将URL列表发送到客户端。然后,客户端可以使用这些URL动态地将a = a[:-1] + str(int(a[-1]) + 1)
标签插入当前页面,浏览器将显示图像。
<img>
代码网址没有跨域限制。
这样做,没有必要尝试从客户端使用Ajax下载图像,因此没有CORS问题。您的服务器执行交叉原始抓取。然后,客户端只需插入带有已删除网址的<img>
代码。
这种技术&#34;借用&#34;来自其他网站的图像,然后使用其带宽在您的页面中显示它们。您应该确保这是允许使用这些图像。
答案 1 :(得分:1)
将已删除的图像列表返回给您的客户端,然后使用您的nodejs服务器作为代理来提供这些图像。
以下是使用request
模块的快速示例:
http.createServer(function (req, resp) {
var x = request('http://example.com/image.png')
req.pipe(x)
x.pipe(resp)
})
然后您的客户可以访问任何所需的图像:
domain.com/proxy?url=http://example.com/image.png