Я использую 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 ();
любые идеи, пожалуйста, о том, как я могу загружать файлы без их развращения?