2016-05-05 24 views
7

大きなファイルのアップロードを許可するためにアップロードスクリプトを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> 
+0

@noogui私は単純なアップロードタイプを使用していると仮定しています。スクリプトでこれをどのように変更するのか分かりません。 – LJB

+0

この[repo](https://github.com/googledrive/cors-upload-sample)をチェックすると、洞察が得られるかもしれません。 – noogui

+0

ドライブのREST APIではなく、Advance Drive Serviceを使用しているので、 'uploadType'は意味がありません。 –

答えて

3

Apps Scriptのサービスがいくつかの機能で毎日クォータとハード制限を課します。

クォータまたは制限を超えた場合、スクリプトは例外をスローして実行を終了します。大きなファイルをアップロードする際

enter image description here

、スクリプトのタイムアウトので、エラーが表示されます。

また、アップロード速度が高い場合は、スクリプトを使用して400MBをアップロードすることもできます。

関連する問題