Загрузите файл Google Диск с помощью javascript

Я хочу загрузить файл Google Диска с помощью javascript на свой сервер, когда я нажимаю на Google Drive picker, но не могу загрузить файл. Я искал, если в течение 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(); 

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

Related of "Загрузите файл Google Диск с помощью javascript"

TLDR;

datatable вам необходимо сериализовать datatable в строку с кодировкой URL.


объяснение

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

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

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

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

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

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