大きなファイルのアップロードを許可するためにアップロードスクリプトをDriveAppsからドライブAPIに変換するには、この投稿の回答に従っています(How to Use Advanced Drive Service to Upload Files)ファイルをアップロードするには約50 GB)が、私はあまり成功していません。GoogleドライブAPIを使用して大容量のファイルをアップロードする
比較的小さなファイル(20 MBほどのファイルで試してみました)をアップロードするとすべてうまく動作しますが、大きなファイル(約400 MB)をアップロードしようとしても何も起こりません。
私は、次のエラーを取得:
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
は、私はドライブのAPIが、私は任意のサイズのファイルをアップロードできるようになったと思いましたか?私は間違って何をしていますか?確認して、ドライブAPIを有効にしました。どんな助けでも大歓迎です。
マイserver.gsスクリプト:
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();
}
}
マイ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>
@noogui私は単純なアップロードタイプを使用していると仮定しています。スクリプトでこれをどのように変更するのか分かりません。 – LJB
この[repo](https://github.com/googledrive/cors-upload-sample)をチェックすると、洞察が得られるかもしれません。 – noogui
ドライブのREST APIではなく、Advance Drive Serviceを使用しているので、 'uploadType'は意味がありません。 –