Google 드라이브를 확인하고 사용자 상호 작용없이 파일을 자동으로 다운로드하는 폴링 웹 앱을 작성하려고합니다.Web App에서 드라이브의 파일을 자동으로 다운로드 하시겠습니까?
ContentService를 사용하여 doGet 함수에 코드를 추가하면 작업을 수행 할 수있었습니다.
그러나 이것은 한 번만 작동하며 타이머 이벤트에서 페이지를 새로 고치거나 다시로드하는 방법이 아닌 것으로 보입니다.
클라이언트 측 javascript에서 SetTimeout을 사용하면 서버 측에서 특정 간격으로 자동으로 트리거되는 기능을 얻을 수 있지만 ContentService의 출력과 관련이 있습니다.
on success 콜백은 createTextOutput의 출력을 허용하지 않습니다.
내 솔루션을 배포 할 필요가 없으며 편집자가 내 선택을 확장하는 경우 편집기에서 실행하게되어 기쁩니다.
그럼 서버 쪽에서 createTextOutput의 결과를 얻었 으면 파일 다운로드를 위해 클라이언트에 다시 가져 오기 위해 무엇을해야합니까?
도움이된다면 코드를 포함 시켰습니다.
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>
setTimeout(
function()
{
document.getElementById('results').innerHTML = 'Event Timer';
google.script.run
.withSuccessHandler(onSuccess)
.withFailureHandler(onFailure)
.fetchFromGoogleDrive();
}, 60000);
function onSuccess(sHTML)
{
document.getElementById('results').innerHTML = 'File Downloaded ' + sHTML;
}
function onFailure(error)
{
document.getElementById('results').innerHTML = error.message;
}
</script>
</head>
<body>
<div id="results">Waiting to DownLoad!</div>
id="Fetch">Fetch!</button>
</body>
</html>
function doGet() {
Logger.log('doGet');
return HtmlService.createHtmlOutputFromFile('form.html');
}
function fetchFromGoogleDrive() {
//Logger.Log('fetchFromGoogleDrive');
var fileslist = DriveApp.searchFiles("Title contains 'Expected File'");
if (fileslist.hasNext()) {
//Logger.Log('File found');
var afile = fileslist.next();
var aname = afile.getName();
var acontent = afile.getAs('text/plain').getDataAsString();
var output = ContentService.createTextOutput();
output.setMimeType(ContentService.MimeType.CSV);
output.setContent(acontent);
output.downloadAsFile(aname);
return afile.getDownloadUrl();
}
else
{
//Logger.Log('No File Found');
return 'Nothing to download';
}
//Logger.log('All files processed.');
}
. 요점은 함수가 입력되면 다운로드를 위해 Google 드라이브 문서를 반환하기위한 메커니즘이 제공되지 않는다는 것입니다. 작동 가능한 유일한 메커니즘은 doGet()을 통해 파일을 다운로드하는 것입니다. – Walter
나는 대답을 편집했다. –