如何使用googlepickerapi计算文件夹google脚本的大小



Yo,我想创建一个脚本,用户可以在其中选择一个文件夹,然后通过获取文件夹的id来显示文件夹的大小。我设法检索了ID,但我不知道如何根据这个ID计算大小并显示它。以下是显示选择器谷歌驱动器的代码:

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css">
<script type="text/javascript">
var DIALOG_DIMENSIONS = {
width: 600,
height: 425
};
var pickerApiLoaded = false;
function onApiLoad() {
gapi.load('picker', {
'callback': function() {
pickerApiLoaded = true;
}
});
google.script.run.withSuccessHandler(createPicker)
.withFailureHandler(showError).getOAuthToken();
}
function createPicker(token) {
if (pickerApiLoaded && token) {
var docsView = new google.picker.DocsView()
.setIncludeFolders(true)
.setMimeTypes('application/vnd.google-apps.folder')
.setSelectFolderEnabled(true);
var picker = new google.picker.PickerBuilder()
.addView(docsView)
.enableFeature(google.picker.Feature.NAV_HIDDEN)
.hideTitleBar()
.setSize(DIALOG_DIMENSIONS.width - 2, DIALOG_DIMENSIONS.height - 2)
.setOAuthToken(token)
.setCallback(pickerCallback)
.setOrigin('https://docs.google.com')
.build();
picker.setVisible(true);
} else {
showError('Unable to load the file picker.');
}
}
/**
* A callback function that extracts the chosen document's metadata from the
* response object. For details on the response object, see
* https://developers.google.com/picker/docs/result
*
* @param {object} data The response object.
*/
function pickerCallback(data) {
var action = data[google.picker.Response.ACTION];
if (action == google.picker.Action.PICKED) {
var doc = data[google.picker.Response.DOCUMENTS][0];
var id = doc[google.picker.Document.ID];
// Show the ID of the Google Drive folder
document.getElementById('result').innerHTML = id;

} else if (action == google.picker.Action.CANCEL) {
google.script.host.close();
}
}
function showError(message) {
document.getElementById('result').innerHTML = 'Error: ' + message;
}



</script>
</head>
<body>
<div>
<p id='result'></p>
</div>
<script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script>
</body>
</html>

function onOpen() {
SpreadsheetApp.getUi().createMenu('Google Picker')
.addItem('Choose Folder', 'showPicker')
.addToUi();
}
/**
* Displays an HTML-service dialog in Google Sheets that contains client-side
* JavaScript code for the Google Picker API.
*/
function showPicker() {
var html = HtmlService.createHtmlOutputFromFile('Picker.html')
.setWidth(600)
.setHeight(425)
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
SpreadsheetApp.getUi().showModalDialog(html, 'Select Folder');
}
function getOAuthToken() {
DriveApp.getRootFolder();
return ScriptApp.getOAuthToken();
}

我想将两个code.gs文件与picker.html 的id合并


function test(){
var root = DriveApp.getFolderById("1fl7XeqwelnlJJnSQjjvDmdxYudfCwQAR");
var list = [];
var list = recurseFolder(root, list);
//Logger.log(JSON.stringify(list));
//This is just how I am testing the outputed list. You can do what you need.
var sheet = SpreadsheetApp.getActiveSheet();
//list.forEach(function (row){
// sheet.appendRow(row); 
//});
Logger.log("test !n")
}
var fileCounter = folderCounter = fileSize = 0;
function recurseFolder(folder, list){


var files = folder.getFiles();  
var subfolders = folder.getFolders();
while (files.hasNext()){ //add all the files to our list first.
var file = files.next();
var row = [];
fileCounter++;
fileSize+=file.getSize();
//Logger.log("File: " + folder.getName());
//row.push(folder.getName(),file.getName(),file.getId(),file.getUrl(),file.getSize(),file.getDateCreated(),file.getLastUpdated())
//list.push(row);
}

while (subfolders.hasNext()){   //Recurse through child folders.
subfolder = subfolders.next(); 
folderCounter++;
//Logger.log("Folder: " + subfolder.getName());
list = recurseFolder(subfolder, list); //Past the original list in so it stays a 2D Array suitible for inserting into a range.
}  
Logger.log ("file : " + fileCounter + " folderCounter : " + folderCounter + " fileSize : " +  fileSize);  
}

您可以使用gapi来使用Drive API,并使用它来执行与应用程序脚本中完全相同的逻辑。您可以阅读官方的quickstart并对其进行修改,以查询文件的大小,而不是简单地列出名称。

请注意,您必须加载authclientpicker。此外,您还必须将拾取器与之集成。

参考文献

  • Google Picker API(Picker API指南(
  • JavaScript(浏览器(快速启动(Google Drive API指南(
  • 文件:get(Google Drive API参考(
  • 文件资源(Google Drive API参考(

最新更新