Загрузите файл Google Диска, используя JavaScript

Я хочу загрузить файл Google Диска, используя JavaScript, на свой сервер, когда я нажимаю на сборщик Google Диска, но не могу загрузить файл. Я искал, если в течение 4 дней, но проблема та же ниже, код, который я использую.

 function pickerCallback(data) {
if (data.action == google.picker.Action.PICKED) {
var id = data.docs[0].id;
var request = new XMLHttpRequest();
request.open('GET', 'https://www.googleapis.com/drive/v2/files/' + id);
request.setRequestHeader('Authorization', 'Bearer ' + gapi.auth.getToken().access_token);
request.addEventListener('load', function() {
var item = JSON.parse(request.responseText);

console.log(item);

downloadFile(item);
});
request.send();
}
}


function downloadFile(item) {
var request = new XMLHttpRequest();
var mimeType = item['mimeType'];
if (typeof item.exportLinks != 'undefined') {
if (mimeType == 'application/vnd.google-apps.spreadsheet') {
mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
}
url = item['exportLinks'][mimeType];
link = url;
} else {
lien = item['downloadUrl'].split("&");
link = lien[0] + '&' + lien[1];
url = item['downloadUrl'];
}
title = item['title'];
type = mimeType;
filesize = item['fileSize'];
fileext = item['fileExtension'];
id = item['id'];


var datatable = $.param({ url: url, title: title, type: type, filesize: filesize, fileext: fileext, id: id});
request.open("POST", "ajax-db-files/copy_drive_file.php?" + datatable, true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.send("datatable=" + datatable);

}

и файл php:

$upload_path='sss';
if (isset($_POST['exportFormat'])) {
$pieces = explode(",", $_POST['exportFormat']);
$url = $_POST['datatable'] . '&exportFormat=xlsx';
$title = $pieces[1];
$type = $pieces[2];
$fileext = $pieces[0];
$fileId = $pieces[5];
}else {
$url = $_POST['datatable'] . '&e=download';
$pieces = explode(",", $_POST['gd']);
$onlytitle = explode(".", $pieces[1]);
$title = $onlytitle[0];
$type = $pieces[2];
$filesize = $pieces[3];
$fileext = $pieces[4];
$fileId = $pieces[5];

}
$fullPath = $upload_path.'/'.$title.'.'. $fileext;
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
//header("Content-type: " . $type . "");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$title.'.'.$fileext."\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $filesize);
// folder to save downloaded files to. must end with slash
$destination_folder = $upload_path.'/';
$newfname = $destination_folder . basename($title . '.' . $fileext);
$file = fopen($url, "rb");
if ($file) {
$newf = fopen($newfname, "wb");
if ($newf)
while (!feof($file)) {
fwrite($newf, fread($file, 1024 * 8), 1024 * 8);
}
}
if ($file) {
fclose($file);
}
if ($newf) {
fclose($newf);
}
ob_end_flush();

введите описание изображения здесь

0

Решение

TLDR;

Вам нужно сериализовать datatable сначала в строку в кодировке URL.


объяснение

var datatable = [url, title, type, filesize, fileext,id];

Здесь вы создаете данные в виде массива

request.open("POST", "ajax-db-files/copy_drive_file.php?" + datatable, true);

request.send("datatable=" + datatable);

Затем в этих двух строках вы пытаетесь объединить массив непосредственно в строку, которая преобразует массив в строку, вызывая .join(',') на массиве.

Что вам нужно, это сериализовать массив в кодировку URL. Если вы используете jQuery, попробуйте var datatable = $.param({ url: url, title: title, type: type, filesize: filesize, fileext: fileext, id: id]); вместо.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]