gpt4 book ai didi

javascript - 文件下载功能需要超过 6 分钟,我该如何改进,在 google app 脚本中?

转载 作者:行者123 更新时间:2023-12-03 03:56:10 25 4
gpt4 key购买 nike

我的文件下载功能需要超过 6 分钟。因此,我无法下载整个文件。有什么办法可以在6分钟内完成下载吗?或者还有其他解决方案吗? html

<html>
<form id="downloadpdf">
<input id="urlclass" type="text" name="urlname" />
</form>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
var urllink = []; //this value assigned by another function. But let us assign statics variable as example urllink={“url1,url2,url3”}
$(document).ready(function() {
$("#downloadpdf").submit(function() {
$("#urlclass").val(urllink);

google.script.run.withSuccessHandler(function(retsearch){
}).downloadthefile(this);
});
});
</script>
</html>

代码.gs

function downloadthefile(urlpass) {
var timezone = SpreadsheetApp.getActive().getSpreadsheetTimeZone();
var now = Utilities.formatDate(new Date(),timezone, "EEE MMM d yyyy HH:mm:ss");
var dest_folder = DriveApp.createFolder(now);
var dest_folder_id = DriveApp.getFoldersByName(dest_folder).next().getId();
var source_folder = DriveApp.getFolderById(“the source folder id");
var dest_folder = DriveApp.getFolderById(dest_folder_id );

// The url that is passed to the function as string
var urlstring = urlpass.urlname;
// Make array of url
var resultarray = urlstring.split(',');

for(var i=0; i < resultarray.length; i++){
var fileurl = resultarray[i];

// Retrieve the url Id
var fileid = fileurl.match(/[-\w]{25,}/);
var file = DriveApp.getFileById(fileid);
var filecopy = file.makeCopy(file.getName());
dest_folder.addFile(filecopy);
}
}

最佳答案

不达到 Google Apps 脚本执行时间限制的解决方法是在模态窗口代码(带有对 Google Drive API 的 XHR 请求的纯 JavaScript)中运行复制请求,而不是在 GAS 脚本中执行。

编辑 [适用于部署为网络应用]:

代码.gs:

function doGet(){
var template = HtmlService.createTemplateFromFile('copyDriveFiles')

// need to have next line of text somewhere (even commented out) to trigger correct scopes for script and token:
// DriveApp.getFiles() // <- DO NOT DELETE THIS COMMENT

// pass token
template.data = {
token: ScriptApp.getOAuthToken()
};

var html = template.evaluate().setTitle('Download');

return html;
}

copyDriveFiles.html:

<html>
<head>
</head>
<body>

<form id="downloadform">
<input id="downloadpdf" type="submit" value="download">
</form>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
// this value assigned by another function. But let us assign statics variable as example urllink = '{“url1,url2,url3”}'
var urllink = 'https://docs.google.com/document/d/XXXXXX/edit,https://docs.google.com/document/d/ZZZZZZ/edit';

// download files
$(document).ready(function(){
$("#downloadform").submit(function(e){
downloadFiles(urllink);

return false;
});
});

function downloadFiles(urllink)
{
<?
// create destination folder
var timezone = Session.getScriptTimeZone();
var now = Utilities.formatDate(new Date(), timezone, "EEE MMM d yyyy HH:mm:ss");
var folder = DriveApp.createFolder(now);
var folderId = folder.getId();
?>

// get folder id
var folderId = <?=folderId?>;

var resultArray = urllink.split(',');

// loop file urls
for (var i = 0; i < resultArray.length; i++)
{
// retrieve the file id from url
var fileId = resultArray[i].match(/[-\w]{25,}/);

// copy file to folder
copyFileToFolder(fileId, folderId);
}
}

function copyFileToFolder(fileId, folderId)
{
var xhr = new XMLHttpRequest();

// request payload - set parents
// here you can specify file name etc: https://developers.google.com/drive/v3/reference/files/copy
var requestBody = {
parents: [folderId]
};

xhr.open('POST', 'https://www.googleapis.com/drive/v3/files/'+fileId+'/copy');
xhr.setRequestHeader('Authorization', 'Bearer <?=data.token?>');
xhr.setRequestHeader('Content-type', 'application/json');

// send request
xhr.send(JSON.stringify(requestBody));
}
</script>
</body>
</html>

结果:

关于javascript - 文件下载功能需要超过 6 分钟,我该如何改进,在 google app 脚本中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44938715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com