我正在努力使用 JavaScript 在我的 HTML 页面上显示来自 Google 云端硬盘的图像。遵循在线指南并没有完全解决我的问题。
HTML(index.html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Google Drive Image</title>
</head>
<body>
<img id="imageElement" alt="A lovely image">
<script src="script.js"></script>
</body>
</html>
JavaScript(script.js):
const fileId = '1BEW9tkgVKlp_ebUc17LkXDH-mnPc4ome';
const imageElement = document.getElementById('imageElement');
async function fetchGoogleDriveImage(fileId) {
try {
const response = await fetch(`https://drive.google.com/uc?id=${fileId}`);
const url = URL.createObjectURL(await response.blob());
imageElement.src = url;
} catch (error) {
console.error('Error fetching the image:', error);
}
}
fetchGoogleDriveImage(fileId);
背景:
附加HTML(纯html):
<body>
<img src="https://drive.google.com/uc?id=1BEW9tkgVKlp_ebUc17LkXDH-mnPc4ome" alt="Your Image Alt Text">
</body>
如有任何帮助,我们将不胜感激!谢谢。
虽然没有在任何地方发布(我发现),但 Google Drive 的服务器已开始拒绝附加这两个标头的请求:
sec-fetch-mode: no-cors
sec-fetch-site: cross-site
如果您将浏览器直接导航到文件的(直接链接)URL(即获取您的
src
URL并将其粘贴到浏览器导航栏中),但该请求期间的sec-fetch-mode
标头将是设置为 navigate
并且效果很好。
但是,与您的
<img>
示例一样,如果请求源是网页,并且与 drive.google.com
来源不同,就会出现问题。 (您的浏览器将自动将这些 sec-fetch-mode
和 sec-fetch-site
标头设置为请求的一部分。)
这似乎是 Google Drive 自 2024 年 1 月 10 日开始的一项未记录的更改,我仍然找不到任何提及它的地方,因此尚不清楚此行为是否会持续存在,或者是否反映了意外更改或疏忽。
我也有同样的问题。临时解决办法是使用大宽度的驱动器文件缩略图
您正在此处执行所有操作,看来问题出在 Google 端,并于今天开始发生(撰写本文时为 2024 年 1 月 11 日)。 Google 可能会解决此问题并允许直接图像嵌入,或者他们可能会继续阻止它,这意味着您必须找到另一种方式来托管网站图像,例如 S3。
(可能)此处跟踪错误:https://issuetracker.google.com/issues/319531488?pli=1
我开始在 HTML 中链接 css 文件时遇到同样的问题。