Google 드라이브에 텍스트 파일의 메타 데이터를 다운로드 할 수 있지만 XMLHttpRequest (XMLHttpRequest.status = 0)를 통해 webContentLink에 액세스 할 수 없습니다. 동일한 webContentLink URL로 window.open (url)을 호출해도 문제가 없습니다. CORS가 webContentLink에 대해 활성화되어 있지 않은 것 같습니다.google 드라이브 : javacript를 통해 webContentLink에 액세스
var clientId = '00000000000000';
var apiKey = 'AAAAAAAAAAAAAAAAAA';
var scopes = 'https://www.googleapis.com/auth/drive';
function loadDoc(url) {
//window.open(url);
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange = function() {
alert("readyState = " + xmlhttp.readyState + " status = " + xmlhttp.status);
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
//... do something
}
}
xmlhttp.open("GET", url, true);
var myToken = gapi.auth.getToken();
xmlhttp.setRequestHeader("Referer", "http://mydomain");
xmlhttp.setRequestHeader("Accept", "text/x-tex");
xmlhttp.setRequestHeader("Content-Type", "text/x-tex");
xmlhttp.responseType = 'arraybuffer';
xmlhttp.overrideMimeType("text/plain");
xmlhttp.setRequestHeader('Authorization', 'Bearer ' + myToken.access_token);
xmlhttp.send();
}
function loadMetaData(url) {
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var metaData = xmlhttp.responseText;
var index = metaData.search('"webContentLink"');
if (index != -1) {
var i1 = metaData.indexOf('"', index + 17);
var i2 = metaData.indexOf('"', i1 + 1);
var fileName = metaData.slice(i1 + 1, i2);
loadDoc(fileName);
}
}
}
xmlhttp.open("GET", url, true);
var myToken = gapi.auth.getToken();
xmlhttp.setRequestHeader('Authorization', 'Bearer ' + myToken.access_token);
xmlhttp.send();
}
// A simple callback implementation.
function pickerCallback(data) {
if (data.action == google.picker.Action.PICKED) {
var fileId = data.docs[0].id;
var url = 'https://www.googleapis.com/drive/v2/files/' + fileId;
loadMetaData(url);
}
}
그래서, 기능 loadMetaData (URL)가 잘 작동 및 기능 loadDoc (URL)를하지 않습니다. 이것이 CORS가 webContentLink 용으로 설정되지 않았기 때문이며 향후 변경 될 수 있습니다.
감사합니다, 대니
이 또한 작동하지 않지만 (XMLHttpRequest.status = 0), 이제 window.open (url)도 빈 창이 생성됩니다. –
'loadMetaData'에 사용하는 것과 동일한 XHR 로직을 사용했지만 'downloadUrl'로 시도해 보셨습니까? 또한, 문자열 조작을 사용하여 속성을 검색하는 대신 JSON 객체를 JS 객체로 파싱하는 'JSON.parse (metaData)'를 사용해야합니다. – Alain
이것은 실제로 문제를 해결했습니다. 고마워, 알랭. 같은 문제를 겪고있는 누군가를 위해 아래에 작업 코드를 게시 할 것입니다. –