【发布时间】:2017-09-10 11:50:13
【问题描述】:
我在 Heroku 上托管的 AngularJS 应用程序不断收到以下错误:
在以下位置访问图像 'https://d15790c7fypqrz.cloudfront.net/attachments/product_template_pictures/images/000/490/265/grid/832816_122.png' 来自 'http://.herokuapp.com' 的来源已被阻止 CORS 策略:没有“Access-Control-Allow-Origin”标头出现在 请求的资源。起源 'http://.herokuapp.com' 因此不是 允许访问。
我该如何解决?这是进行base64转换的代码:
function createBase64Property(product, callback, outputFormat) {
var img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function() {
var canvas = document.createElement('CANVAS');
var ctx = canvas.getContext('2d');
var dataURL;
canvas.height = this.height;
canvas.width = this.width;
ctx.drawImage(this, 0, 0);
dataURL = canvas.toDataURL(outputFormat);
callback(product, dataURL);
};
img.src = product.imageUrl;
if (img.complete || img.complete === undefined) {
img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';
img.src = product.imageUrl;
}
}
我的web.js配置如下:
var gzippo = require('gzippo');
var express = require('express');
var morgan = require('morgan');
var cors = require('cors')
var app = express();
app.use(morgan('dev'));
app.use(gzippo.staticGzip(__dirname));
app.use(cors({credentials: true, origin: true}));
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
});
app.listen(process.env.PORT || 5000);
【问题讨论】:
-
它的
d15790c7fypqrz.cloudfront.net需要允许跨域请求,而不是你自己的服务器。但看起来您发布的代码与该错误无关。 -
@robertklep 你知道有什么免费的地方可以上传允许跨域请求的图片吗?
-
为什么图片需要跨域请求支持?你不能用
<img src="https://d15790c7fypqrz.cloudfront.net/...">吗? -
我正在将图像转换为 base64 格式,然后将其与上传的图像进行比较。
-
嗯,好吧,在这种情况下,我猜你会需要它。恐怕我不知道这样的地方:(