30秒到達戰場
2021-12-02 14:36:15
看起來這個問題主要與我的 aws s3 存儲桶 CORS 配置有關我補充說:<?xml version="1.0" encoding="UTF-8"?><CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><CORSRule> <AllowedOrigin>https://www.example.com</AllowedOrigin> <AllowedMethod>PUT</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>DELETE</AllowedMethod> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>HEAD</AllowedMethod> <AllowedHeader>*</AllowedHeader></CORSRule></CORSConfiguration>到我的存儲桶 CORS 配置,但這也無濟于事。出于某種原因,我可以將照片添加到畫布(取決于代碼)但無法使用來自 AWS 的圖像保存畫布我有一個 fabric.js 畫布,它被亞馬遜 s3 的圖像污染了。我不確定到底發生了什么。當我嘗試通過單擊保存來保存畫布時:控制臺上的 Chrome 錯誤:未捕獲的 DOMException:無法在“HTMLCanvasElement”上執行“toDataURL”:可能無法導出受污染的畫布??刂婆_上的 FireFox 錯誤:操作不安全https://jsfiddle.net/je3mL5go/1/在 jsfiddle 中,它在添加的行}, {crossOrigin: 'Anonymous'});存在時起作用。在 Heroku 上使用 s3 圖像進行生產:在 FireFox 中,我可以從選擇菜單中選擇一個圖像并將其添加到畫布中。我會得到前面提到的錯誤,但如果我反復單擊“保存”按鈕,在點擊次數足夠多(通常是 5-30 次)后,我可以將畫布另存為 png。在 Chrome 中,這種“hack”似乎根本不起作用。這背后有解釋嗎?似乎因為我在 AWS S3 中托管圖像,這也會影響它。但即使這樣,上面的例子(在 FireFox 中重復點擊)仍然有效。嘗試:和:function updateTshirtImage(imageURL){ fabric.Image.fromURL(imageURL, function(img) { img.scaleToHeight(300); img.scaleToWidth(300); img.crossOrigin = 'anonymous'; canvas.centerObject(img); canvas.add(img); canvas.renderAll(); });};我可以上傳圖片,但是當我點擊保存時:我得到與上面相同的錯誤。當我使用:function updateTshirtImage(imageURL){ fabric.Image.fromURL(imageURL, function(img) { img.scaleToHeight(300); img.scaleToWidth(300); canvas.centerObject(img); canvas.add(img); canvas.renderAll(); }, {crossOrigin: 'anonymous'});};選擇圖片上傳時出錯No 'Access-Control-Origin-Header' is present...試圖:function updateTshirtImage(imageURL){ var rand = '?'+Math.random(); var no_cors = new Image(); no_cors.onload = loadCORS; no_cors.src = imageURL + rand;錯誤:Chrome:404 錯誤Firefox:沒有錯誤,不工作。這里的問題是我在從 aws 請求之前以某種方式更改了 aws s3 的 url?
1 回答

12345678_0001
TA貢獻1802條經驗 獲得超5個贊
添加:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>https://www.example.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
實際上做到了??雌饋砦抑恍枰却?。第二天我測試了,它奏效了!
澄清一下,上面的頭代碼可能有點矯枉過正,但這是我目前所處的位置。我將測試和“調試”并刪除一些允許的方法,看看哪些和哪些不需要。
添加回答
舉報
0/150
提交
取消