Using Google Drive API to upload large files(使用 Google Drive API 上传大文件)
问题描述
我试图按照这篇文章中的答案(
上传大文件时,脚本会超时,因此会显示错误.
同样,如果您有更高的上传速度,那么使用脚本上传 400MB 也是可能的.
I was trying to follow the answer in this post (How to Use Advanced Drive Service to Upload Files) to convert my upload script from using DriveApps to Drive API in order to allow large file uploads (I'll need to be able to upload files around 50 GB) but I haven't had much success.
Everything works fine when I'm uploading relatively small files (I've tried with files around 20 MB), but when I try and upload a larger file (around 400 MB), nothing happens.
I get the following errors:
POST 2601514732-mae_html_user_bin_i18n_mae_html_user.js:71 POST …3A1462412854269&fsid=4787eea0-1d3c-4fd8-b263-8bae40da182d&func=uploadFiles 413 ()
375182757-mae_html_driver_bin_i18n_mae_html_driver.js:113 GET …b263-8bae40da182d&token=AJuLMu2o9KnAOrSvzonQHNRGUelVpsakEg%3A1462412854269 500 ()
2601514732-mae_html_user_bin_i18n_mae_html_user.js:46 Uncaught NetworkError: Connection failure due to HTTP 500
I thought the Drive API was supposed to allow me to upload any size file? What am I doing wrong? I checked and I enable the Drive API. Any help is greatly appreciated.
My server.gs script:
function doGet(e) {
return template = HtmlService.createHtmlOutputFromFile('form.html');
return template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
function uploadFiles(form) {
try {
var dropbox = "File Transfer";
var folder, folders = DriveApp.getFoldersByName(dropbox);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(dropbox);
}
//Upload file and set various properties
var mediaData = form.File1;
var timeStamp = new Date();
var resource = {
description: "File uploaded on: " + timeStamp
};
var file = Drive.Files.insert(resource, mediaData); // create file using Drive API
var fileId = file.id;
var DriveAppFile = DriveApp.getFileById(fileId); // retrieve file in DriveApp scope.
DriveApp.removeFile(DriveAppFile); // remove new file from Users root My Drive
folder.addFile(DriveAppFile); // puts file in selected folder
return "Thank you for your submission."
} catch (error) {
return error.toString();
}
}
My form.html:
<!DOCTYPE html>
<!-- You can also include your own CSS styles -->
<link href='https://fonts.googleapis.com/css?family=Bitter' rel='stylesheet' type='text/css'>
<div class="form-style-10">
<title>File Transfer </title>
<form id="myForm" name="myForm">
<h1> File Transfer </h1>
<p></p>
<fieldset class="fields">
<div class="section"> Files </div>
<div class="inner-wrap">
<label for="File1"> File 1 </label>
<input type="file" name="File1" required />
</div>
</fieldset>
<p> </p>
<p id="incompleteWarning" class="hideClass"> Please select a file to transfer. </p>
<p id="bePatient" class="hideClass"> Please be patient while the file is being uploaded. Do not close or refresh the form. You will see a "transfer complete" message when the upload is finished.</p>
<input id="submitbutton" type="button" value="Submit Application" />
</form>
<div id="output" class="hideClass">
<h1 id="TitleForm"> File Transfer </h1>
<span id="ThankYou" >Transfer complete! If you need to transfer another file, you can use the same link again.
</span>
</div>
</div>
<script type="text/javascript">
document.getElementById('submitbutton').addEventListener("click", validatefunction);
function validatefunction() {
document.getElementById('submitbutton').val = 'Submitting...';
//check for required fields
var j = 0;
var form = document.getElementById('myForm');
var elem = form.elements;
for (var i = 0; i < elem.length; i++){
elem[i].className = "";
if (elem[i].value === "" && elem[i].hasAttribute('required')){
elem[i].className = "warning";
j++;
}
}
if (j === 0) {
var btn = document.getElementById('submitbutton');
btn.disabled = true;
document.getElementById('incompleteWarning').style.display = 'none';
document.getElementById('bePatient').style.display = 'inline';
google.script.run.withSuccessHandler(fileUploaded).uploadFiles(this.parentNode);
} else{
document.getElementById('submitbutton').val = 'Submit Application';
document.getElementById('incompleteWarning').style.display = 'inline';
document.getElementById('incompleteWarning').style.color = 'red';
}
};
</script>
<script>
function fileUploaded(status) {
document.getElementById('myForm').style.display = 'none';
document.getElementById('output').style.display = 'inline';
}
</script>
<style>
input { display:block; margin: 20px; }
</style>
Apps Script services impose daily quotas and hard limitations on some features.
If you exceed a quota or limitation, your script will throw an exception and terminate execution.
While uploading a large file, the script time-outs and thus will show errors.
Again, if you have a higher upload speed then uploading 400MB might as well be possible using script.
这篇关于使用 Google Drive API 上传大文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用 Google Drive API 上传大文件


- 为什么我的页面无法在 Github 上加载? 2022-01-01
- 如何显示带有换行符的文本标签? 2022-01-01
- 使用 iframe URL 的 jQuery UI 对话框 2022-01-01
- 如何调试 CSS/Javascript 悬停问题 2022-01-01
- 我不能使用 json 使用 react 向我的 web api 发出 Post 请求 2022-01-01
- 从原点悬停时触发 translateY() 2022-01-01
- 是否可以将标志传递给 Gulp 以使其以不同的方式 2022-01-01
- 在不使用循环的情况下查找数字数组中的一项 2022-01-01
- 为什么悬停在委托事件处理程序中不起作用? 2022-01-01
- 如何向 ipc 渲染器发送添加回调 2022-01-01