我试图按照这篇文章中的答案(
上传大文件时,脚本会超时,因此会显示错误.
同样,如果您有更高的上传速度,那么使用脚本上传 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 上传大文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!