我需要将图像下载到我的Heroku服务器,因此我可以在画布上为客户端绘制它们。我正在使用服务器作为启用了CORS的代理。
Heroku上的我的节点服务器有一个GET请求,它接收一个网址,将其下载到./downloads/image.jpg
然后再发送新的网址,例如:http://foo.herokuapp.com/downloads/image.jpg
。然后,cilent可以使用该URL在画布上绘制而不会污染它。
我知道Heroku会频繁删除所有上传的图片,而S3会更好用于图片托管,但我只是希望这些图片只能保留一分钟,所以我该怎么办呢?
此外,我尝试从我的浏览器访问图像,就像它在http://foo.herokuapp.com/app/downloads.image.jpg
上传一样,但每次都获得404。
答案 0 :(得分:0)
事实证明,由于其Ephemeral Filesystem
,这在Heroku上是不可能的自发布问题以来,我已经使用代理请求找到了解决问题的方法:
const express = require("express")
const fetch = require("node-fetch") // To pipe received image back to caller
const cors = require("cors")
const app = express()
app.use(cors()) // Enable cross-origin resource sharing
// GET request to serve as proxy for images
app.get("/proxy", (req, resposnse) => {
const url = req.query.url
if (url && url.length > 0) {
fetch(url)
.then(res => res.body.pipe(response))
.catch(err => console.log(err))
}
})
通过这种方式,任何在/proxy
上发送带有指向服务器的图像的URL的请求的人都会将其通过管道返回。
例如:.../proxy?url=https://cats.com/cat.jpg"
将返回可以在<canvas>
元素上自由绘制的图像。
<img>
标签也是如此:<img src=".../proxy?url=https://cats.com/cat.jpg" />