Я использую google picker в своем веб-приложении, чтобы позволить пользователю просматривать и выбирать файлы со своего диска Google. Когда он делает выбор, сборщик возвращает различные данные о выбранных файлах, включая идентификатор файла и URL. Моя цель – загрузить выбранные файлы на сервер. Если я передаю URL-адрес моему внутреннему скрипту, он загрузит файл, но они повреждены, вот мой код:
функция обратного вызова:
function onPickerAction(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(); } }
это функция, которая отправляет данные в файл php:
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 = [url, title, type, filesize, fileext,id]; document.getElementById("myddlink").href=link; request.open("POST", "downloadfile.php?" + datatable, true); request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); request.send("datatable=" + datatable); }
и это моя php-функция для загрузки файлов:
if (isset ($ _ POST ['exportFormat'])) { $ pieces = explode (",", $ _POST ['exportFormat']); $ url = $ _POST ['datatable']. '& ExportFormat = XLSX'; $ title = $ pieces [1]; $ type = $ pieces [2]; $ fileext = $ pieces [0]; $ fileId = $ штук [5]; } else { $ url = $ _POST ['datatable']. '& Е = скачать'; $ pieces = explode (",", $ _POST ['gd']); $ onlytitle = explode (".", $ pieces [1]); $ title = $ onlytitle [0]; $ type = $ pieces [2]; $ filesize = $ pieces [3]; $ fileext = $ pieces [4]; $ fileId = $ штук [5]; } $ fullPath = $ upload_path. '/ Myfiles1 /'. $ title. '' , $ Fileext; header («Pragma: public»); заголовок («Истекает: 0»); header («Cache-Control: обязательный-revalidate, post-check = 0, pre-check = 0»); header («Cache-Control: public»); header («Content-Description: File Transfer»); header ("Content-type:". $ type. ""); header ("Content-Disposition: attachment; filename = \" ". $ title. '.'. $ fileext." \ ""); header («Content-Transfer-Encoding: binary»); header («Content-Length:». $ filesize); // папка для сохранения загруженных файлов. должен заканчиваться косой чертой $ destination_folder = $ upload_path. '/ Myfiles1 /'; $ 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 ($ файла); } if ($ newf) { fclose ($ Newf); } ob_end_flush ();
любые идеи, пожалуйста, о том, как я могу загружать файлы без их развращения?