我想將圖像加載到canvas元素中,然後將數據拖出到toDataURL()中。我所有的瀏覽器都沒有發送原始頭文件
我有我的網站使用Ruby運行on Rails的2.3
我有我的圖片來自AWS的S3服務。我已經安裝CORS:
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
我有一個canvas元素:
<canvas id="explain_canvas"></canvas>
好了,所以一些背景。我最初試圖用這樣的代碼,其中drawing_image只是圖像的url。
var outlineImage = new Image();
outlineImage.crossOrigin = '';
outlineImage.src = drawing_image;
outlineImage.onload = function() {
var canvas = document.getElementById('explain_canvas');
var context = canvas.getContext("2d");
context.drawImage(outlineImage, 10, 10, 600, 150);
}
但是,這並沒有發送源頭。所以我想我會嘗試通過jQuery的阿賈克斯電話
var outlineImage = new Image();
$(outlineImage).attr('crossOrigin', '');
$.ajax({
type: 'get',
url : drawing_image,
contentType: 'image/png',
crossDomain: 'true',
success: function() {
$(outlineImage).attr("src", drawing_image);
},
error: function() {
console.log('ah crap');
}
});
outlineImage.onload = function() {
var canvas = document.getElementById('explain_canvas');
var context = canvas.getContext("2d");
context.drawImage(outlineImage, 10, 10, 600, 150);
}
但仍然沒有運氣。我錯了嗎?如果該jquery ajax發送源頭?
我看請求頭,這就是我得到的圖像:
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Host:em2-images.s3.amazonaws.com
Referer:http://localhost:3000/courses/18/quizzes/22/take
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.101 Safari/537.11
而jQuery的錯誤,這一點:
XMLHttpRequest cannot load http://em2-images.s3.amazonaws.com/EM2_LF_A_5_item6.png. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.
ah crap
什麼是怪我是jQuery的狀態來源,但它不在請求標題中。
此計算器問題here聲明他想刪除原始標題。那麼他正在與jquery ajax進行同樣的調用並獲得它。任何想法,爲什麼我不是?
如果我重新加載頁面,它會抓取緩存的圖像並加載它(用原始標題記住你)並調用toDataURL()就好了。在我清除緩存後,再次加載直到圖像被緩存爲止無法工作。
我開始想知道Rails是否在爲它做點什麼,但是我不明白它會怎麼做,因爲這是一個Ajax調用。但誰知道,誰知道Rails是否可以做到這一點?
我已經在不同平臺上的幾種瀏覽器中嘗試了這一點。 Chrome,Firefox,Safari,IE 9 & 10.在我的Mac,PC和iPhone上。沒有任何骰子。
-Thanks-
謝謝!一旦我知道發生了什麼,我設法解決這個問題,方法是在URL中添加一個緩存破壞性的GET屬性。 – user1618143
必須爲那些仍然卡住的東西添加一些東西。你的回答是正確的,但是當獲得高速緩存的資源時,第二次使用相同的圖像時,它會刪除原始標題。因此,如果您需要緩存圖片,請將其保存在JavaScript中,並且不要再嘗試請求。我發現我試圖提高效率的做法是在緩存項目上拋出錯誤。 –
啊,夥計!你救了我的星期五!這種行爲非常麻煩。 –