从谷歌驱动器下载的文件选择器被损坏
我在我的网络应用程序中使用谷歌选择器,允许用户浏览并从他的谷歌驱动器中选择文件。 一旦他做出选择,选择器就会返回关于选定文件的各种数据,包括文件ID和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 = $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 . '/Myfiles1/' . $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-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 . '/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($file); } if ($newf) { fclose($newf); } ob_end_flush();
任何想法请关于我如何下载文件而不会破坏它们?
链接地址: http://www.djcxy.com/p/45521.html上一篇: files downloaded from google drive usin picker are corrupted