javascript - XMLHttpRequest Access-Control-Allow-Origin 错误 Google Drive API

标签 javascript download google-drive-api

我尝试在 WordPress 主题中访问 Google 云端硬盘,但在下载所选文件时出现以下错误。

XMLHttpRequest cannot load https://drive.google.com/a/mobfish.net/file/d/0B5IETzPj-JCw832h9rdwk/view?usp=drive_web. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://wptest.dev' is therefore not allowed access.

(我稍微修改了URL,这不是真正的文件ID)

这是 JavaScript 代码:

var developerKey = document.getElementById('key').innerHTML;
var clientId = document.getElementById('clientID').innerHTML;


// Scope to use to access user's photos.
var scope = ['https://www.googleapis.com/auth/drive.readonly'];

var pickerApiLoaded = false;
var oauthToken;

// Use the API Loader script to load google.picker and gapi.auth.
function onApiLoad() {
  gapi.load('auth', {'callback': onAuthApiLoad});
  gapi.load('picker', {'callback': onPickerApiLoad});
  gapi.load("client");
}

function onAuthApiLoad() {
  window.gapi.auth.authorize(
          {
            'client_id': clientId,
            'scope': scope,
            'immediate': false
          },
  handleAuthResult);
}

function onPickerApiLoad() {
  pickerApiLoaded = true;
  createPicker();
}

function handleAuthResult(authResult) {
  if (authResult && !authResult.error) {
    oauthToken = authResult.access_token;
    createPicker();
  }
}

// Create and render a Picker object for picking user Photos.
function createPicker() {
  if (pickerApiLoaded && oauthToken) {
    var view = new google.picker.DocsView(google.picker.ViewId.DOCS_IMAGES_AND_VIDEOS)
      .setIncludeFolders(true)
      .setSelectFolderEnabled(true);

    var picker = new google.picker.PickerBuilder().
            hideTitleBar().
            disableFeature(google.picker.Feature.NAV_HIDDEN).
            addView(view).
            setOAuthToken(oauthToken).
            setDeveloperKey(developerKey).
            setCallback(pickerCallback).
            build();
    picker.setVisible(true);
  }
}

// A simple callback implementation.
function pickerCallback(data) {
  var url = 'nothing';

  if (data.action == google.picker.Action.PICKED) {
    var file = data.docs[0];
    download(file);
  }
}

function download(file) {
  console.log("downloading " + file.id);
  console.log(file);
  var downloadUrl;

  if (file.url) {
    var accessToken = gapi.auth.getToken().access_token;
    var xhr = new XMLHttpRequest();
    xhr.open('GET', file.url);

    xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);
    xhr.onload = function() {
      callback(xhr.responseText);
    };
    xhr.onerror = function() {
      callback(null);
    };
    xhr.send();
  } else {
    callback(null);
  }
}

function callback(param) {
  console.log(param);
}

也许我只是忘记在 https://console.developers.google.com 添加一些设置? 预先感谢,问候。

最佳答案

也许您遇到的问题是跨源安全性。基本上,大多数网络浏览器不允许您从自己之外的服务器提取内容,除非服务器表示可以。为此,服务器需要在 header 中看到可接受的 Access-Control-Allow-Origin

在此找到link有关如何在 WordPress 中启用 CORS 的教程。您只需要在头文件中添加适当的头即可:

<?php /** @package WordPress @subpackage Default_Theme  **/
header("Access-Control-Allow-Origin: *"); 
?>
<!DOCTYPE html>

您还可以查看这些相关主题:

希望这有帮助!

关于javascript - XMLHttpRequest Access-Control-Allow-Origin 错误 Google Drive API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38745117/

相关文章:

javascript - pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);

javascript - 无法将 javascript 变量传递给 php 标记

google-apps-script - 将 .XLSX 转换为 Google 表格并移动转换后文件的脚本

google-apps-script - 在 Google 电子表格中运行脚本时出现权限错误

javascript - 什么时候可以抓取 JavaScript 内容(如果有的话)?

javascript - 使用 Angular 指令中的 jQuery.matchHeight

php - 如何从MySQL数据库中存储的URL下载一批图片

ios - 取消 dropbox loadFile

javascript - 在 IE11 中下载文件出现错误 "' Uint8Array' is undefined”

html - 在 Google Drive 上显示 HTML 文件?